使用Object.setPrototypeOf()设置对象的原型

46 篇文章 0 订阅
14 篇文章 0 订阅

此方法可以设置对象的原型。
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方法修改对象实例的原型对象,不会对其他对象的原型对象产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值