我们可以通过更改构造函数attr在java脚本中更改对象的类型吗?

时间:2018-02-15 16:16:29

标签: javascript

据说在java脚本中,解释器使用构造函数属性来阻止对象的类型。

例如:

function Person(name){this.name=name}

var person = new Person('jack')

在这种情况下,person.constructor将是函数Person

所以我想如果我改变了pe​​rson.constructor =其他一些构造函数

java脚本解释器会将person识别为另一种类型。

这是我的测试

function Car(brand){this.brand=brand}

person.constructor = Car

person.__proto__.constructor = Car

person instanceof Car 
return false

为什么解释者仍然认为人是人的类型还是汽车?

1 个答案:

答案 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__属性。