Ojbect.setPrototypeOf()
程序员文章站
2022-04-21 21:09:47
...
此方法可以设置对象的原型。
Object.setPrototypeOf方法是针对对象实例的,而不是构造函数(类),此方法修改的是对象实例的内部属性[[Prototype]],也就是__proto__属性所指向的对象,它只是修改了特定对象上的原型对象,对于构造函数的prototype指向的原型对象没有影响。那是不是此方法就不能针对构造函数了,那也不是,因为构造函数本身也是Function(类)的实例。
ES2015新增此方法。
实例:
function Person(){
this.name = 'dean',
this.age = 18
}
let proto = {
url: 'https://www.baidu.com'
}
Person.prototype.city = '广东广州'
var one = new Person();
var two = new Person();
Object.setPrototypeOf(one, proto);
console.log(one.addrname);
console.log(two.addrname);
运行结果:
undefined
广东广州
代码分析如下:
(1).为构造函数Person原型对象添加一个属性address。
(2).通过构造函数Person创建两个实例对象。
(3).然后通过Object.setPrototypeOf方法更改one对象的原型对象,更改为proto对象。
(4).现在看打印结果,由于one对象的原型对象被修改,新的原型对象中并没有address属性,所以one对象的city属性值是undefined。two对象的address属性依然"广东广州",可以看到通过Object.setPrototypeOf方法修改对象实例的原型对象,不会对其他对象的原型对象产生影响。