What type of object is 'Worker' in JavaScript
javascript, web-worker
Solution
Worker IS of type function. You can check that using the `typeof` operator. However, it does not inherit the prototype of the Function constructor, hence it is not an `instanceof` Function.
Here's a more practical example:
function fun(){};
Function.prototype.foo = 'my custom Function prototype property value';
console.log(fun.foo); //my custom Function prototype property value
console.log(fun instanceof Function); //true
console.log(typeof Worker); //function, the constructor
console.log(Worker.foo); //undefined, this host constructor does not inherit the Function prototype
console.log(Worker instanceof Function); //false
var worker = new Worker('test.js');
console.log(typeof worker); //object, the instance
console.log(worker.foo); //undefined, instance object does not inherit the Function prototype
console.log(worker instanceof Function); //false
From MDN:
The `instanceof` operator tests whether an object has in its prototype chain the prototype property of a constructor.
Worker does not inherit the Function constructor's prototype, hence it is not an instance of Function.
Here's an example using the `typeof` operator to check if the user's browser supports the Web Workers API:
if (typeof window.Worker !== 'undefined') {
alert('Your browser supports Web Workers!');
} else {
alert('Sorry, but no.'); //too lazy to write a proper message for IE users
}
Fiddle
Problem
I am getting slightly confused about all this... Chrome and Firefox both tell me different things, and I couldn't find any part in the spec that mentioned it, but: in Chrome: ``` Object instanceof Function // true Function instanceof Object // true Worker instanceof Object // true Worker instanceof Function // false <- WTF??? ``` in FireFox: ``` Object instanceof Function // true Function instanceof Object // true Worker instanceof Object // false Worker instanceof Function // false ``` of course, an initialised new Worker() is both a Worker and an Object, but why is the Worker constructor not a function?