Ojbect.setPrototypeOf()

此方法可以设置对象的原型。

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.city);
    console.log(two.city);

运行结果:

undefined
广东广州

代码分析如下:

(1).为构造函数Person原型对象添加一个属性city。
(2).通过构造函数Person创建两个实例对象。
(3).然后通过Object.setPrototypeOf方法更改one对象的原型对象,更改为proto对象。
(4).现在看打印结果,由于one对象的原型对象被修改,新的原型对象中并没有city属性,所以one对象的city属性值是undefined。two对象的city属性依然"广东广州",可以看到通过Object.setPrototypeOf方法修改对象实例的原型对象,不会对其他对象的原型对象产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值