是`instanceOf`运算符的对象的`constructor`属性

时间:2016-06-06 09:54:42

标签: javascript

MDN声明:

  

instanceof运算符测试了constructor.prototype的存在   对象的原型链。

// defining constructors
function C(){}
function D(){}

var o = new C();

// true, because: Object.getPrototypeOf(o) === C.prototype
o instanceof C;

好的,让我们改变constructor属性:

function Z() {}
o.constructor = Z;
o instanceof C; // still returns true

为什么?

1 个答案:

答案 0 :(得分:1)

在句子中

  

instanceof运算符测试对象原型链中constructor.prototype的存在。

constructor未提及constructor property on Object.prototype,而是提及right hand side parameter to the instanceof operator

设置o.constructor = Z不会改变任何相关内容。您可以使用[[Prototype]]o

更改对象Reflect.setPrototypeOf的{​​{1}}

演示Object.setPrototypeOf

的行为
instanceof

在此示例中,var proto = {} var o = Object.create(proto) function t() {} t.prototype = proto o instanceof t // --> true 必须是一个函数,因为spec定义它必须是可调用的。

您可能会看到ES2015中引入了t运算符的新行为。 instanceof符号现在可用于控制hasInstance的行为。但如果未定义instanceof,则使用旧行为。

使用hasInstance符号,您可以创建一个"构造函数"对所有可能的对象返回true。

hasInstance