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

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

相关标签: Object