据说在java脚本中,解释器使用构造函数属性来阻止对象的类型。
例如:
function Person(name){this.name=name}
var person = new Person('jack')
在这种情况下,person.constructor将是函数Person
所以我想如果我改变了person.constructor =其他一些构造函数
java脚本解释器会将person识别为另一种类型。
这是我的测试
function Car(brand){this.brand=brand}
person.constructor = Car
person.__proto__.constructor = Car
person instanceof Car
return false
为什么解释者仍然认为人是人的类型还是汽车?
答案 0 :(得分:0)
首先,不要使用对象的__proto__
属性:虽然在EcmaScript2015中标准化,但也不赞成使用Object.setPrototypeOf
。但是,如果您更改原型而不是构造函数,则两者都有效:
function Person(name){this.name=name}
var person = new Person('jack')
function Car(brand){this.brand=brand}
Object.setPrototypeOf(person, Car.prototype);
// This also works:
// person.__proto__ = Car.prototype;
console.log(person instanceof Car); // true
因此,不是构造函数属性定义原型链,而是__proto__
属性。