欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Object.setPrototypeOf()

程序员文章站 2022-04-05 14:52:11
...

此方法可以设置对象的原型。
Object.setPrototypeOf方法是针对对象实例的,而不是构造函数(类),此方法修改的是对象实例的内部属性[prototype],也就是_proto_属性所指向的对象,它只是修改了特定对象上的原型对象,对于构造函数的prototype指向的原型对象没有影响。那是不是此方法就不能针对构造函数了,因为构造函数本身也是function(类)的实例。
ES2015新增此方法。
语法结构:
Obejct.setPrototypeOf(obj,proto);
参数解析:
(1).obj:必需,对其设置原型的对象。
(2).proto:必需,新的原型对象。

浏览器支持:
(1).IE11浏览器支持此方法。
(2).edge浏览器支持此方法。
(3).火狐浏览器支持此方法。
(4).谷歌浏览器支持此方法。
(5).opera浏览器支持此方法。
(6).safria浏览器不支持此方法。

JavaScript代码实例如下:

let proto=
{
url:"www.softwhy.com"
};
let obj=
{
webName:"蚂蚁部落",
age:4
};
Object.setPrototypeOf(obj,proto);
console.log(obj.url);

上述代码将obj对象的原型对象设置为proto对象。
function Antzone(){
this.webName=“蚂蚁部落”;
this.age=4;
}

let proto = {
url:“www.softwhy.com”
};
Antzone.prototype.address=“青岛市南区”;
let one=new Antzone();
let two=new Antzone();
Object.setPrototypeOf(one, proto);
console.log(one.address);
console.log(two.address);
代码分析如下:
(1).为构造函数Antzone原型对象添加一个属性address。
(2).通过构造函数Antzone创建两个实例对象。
(3).然后通过Object.setPrototypeOf方法更改one对象的原型对象,更改为proto对象。
(4).现在看打印结果,由于one对象的原型对象被修改,新的原型对象中并没有address属性,所以one对象的address属性值是undefined。two对象的address属性依然"青岛市南区",可以看到通过Object.setPrototypeOf方法修改对象实例的原型对象,不会对其他对象的原型对象产生影响。

相关标签: 前端 脚本语言