当第一次遇到instanceof时,JavaScript中的JavaScript关键字可能会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言。
发布于 2012-02-09 23:04:33
这里的其他答案是正确的,但它们没有深入了解instanceof的实际工作方式,这可能会引起一些语言律师的兴趣。
JavaScript中的每个对象都有一个原型,可以通过__proto__属性访问。函数还有一个prototype属性,它是它们创建的任何对象的初始__proto__。在创建函数时,将为prototype提供一个唯一的对象。instanceof运算符使用此唯一性给您一个答案。如果您将instanceof作为一个函数编写,下面是它的样子。
function instance_of(V, F) {
var O = F.prototype;
V = V.__proto__;
while (true) {
if (V === null)
return false;
if (O === V)
return true;
V = V.__proto__;
}
}这基本上是翻译ECMA-262版5.1 (也称为ES5),第15.3.5.3节.
注意,您可以将任何对象重新分配到函数的prototype属性,也可以在构造对象的__proto__属性之后重新分配它。这将给你一些有趣的结果:
function F() { }
function G() { }
var p = {};
F.prototype = p;
G.prototype = p;
var f = new F();
var g = new G();
f instanceof F; // returns true
f instanceof G; // returns true
g instanceof F; // returns true
g instanceof G; // returns true
F.prototype = {};
f instanceof F; // returns false
g.__proto__ = {};
g instanceof G; // returns falsehttps://stackoverflow.com/questions/2449254
复制相似问题