我已经了解到,在函数原型中,指向函数本身的指针包含在名为constructor
的字段中。
function Person(){
}
alert(Person.prototype.constructor); // function Person(){}
如果我用对象文字覆盖函数原型,构造函数字段自然会丢失:
function Person(){
}
Person.prototype = {
name:"Sahand",
age:24
}
alert(Person.prototype.constructor); // function Object(){[native code]}
但是,当以这种方式覆盖原型时,我们仍然可以检查对象是否由Person
构造函数创建:
var person = new Person()
alert(person instanceof Person); // true
这怎么可能?当原型的instanceof
字段不再包含person
时,Person()
如何constructor
找出Person
创建的内容?
答案 0 :(得分:1)
instanceof运算符测试其原型链中是否有对象 具有构造函数的prototype属性。
考虑一下:
function Person(){}
Person.prototype = {
name:"Sahand",
age:24
}
var person = new Person();
console.log('instanceof', person instanceof Person);
console.log('Is "person __proto__ === Person.prototype":',
person.__proto__ === Person.prototype);

但如果您在创建实例后更改Person.prototype
,那么现在person instanceof Person === false
:
function Person(){}
Person.prototype = {
name:"Sahand",
age:24
}
var person = new Person();
Person.prototype = {};
console.log('insanceof: ', person instanceof Person);

答案 1 :(得分:0)
导致instance instanceof constructor
运算符未在instance.prototype.constructor
constructor.prototype
而非instance.__proto__