美文网首页让前端飞Web前端之路
__proto__的指向(对象创建时的实现方式)

__proto__的指向(对象创建时的实现方式)

作者: Hello杨先生 | 来源:发表于2019-06-28 14:03 被阅读3次

所有的对象都有"proto"属性,该属性对应该对象的原型
所有的函数对象都有"prototype"属性,该属性的值会被赋值给该函数创建的对象的"proto"属性
所有的原型对象都有"constructor"属性,该属性对应创建所有指向该原型的实例的构造函数
函数对象和原型对象通过"prototype"和"constructor"属性进行相互关联

proto的指向取决于对象创建时的实现方式

三种指向:
1、字面量的方式
2、构造器方式
3、object.create
//1、字面量的方式
        var a = {};
        console.log(a.__proto__);//Object
        console.log(a.__proto__=== a.constructor.prototype);  //true
        大多数情况下该元素的原型===该元素的构造器的原型
// 2、构造器方式
        var A = function () {}
        var a = new A(); //new出来一个新的对象,这个对象变相的继承A的所有属性方法
        //a.__proto__  ->指向 -> A.prototype
        console.log(a.__proto__);//object
        console.log(a.__proto__ === a.constructor.prototype); //true
// 3、object.create
        var a1 = {
            a: 1
        }
        var a2 = Object.create(a1); //创建和a1一模一样的对象并赋值给a2

        console.log(a2.__proto__); ////Object//a: 1
        console.log(a2.constructor.prototype);
        console.log(a2.__proto__ === a2.constructor.prototype); //false
        console.log(a2.__proto__ === a1);//true    指向创建对象的本身

相关文章

网友评论

    本文标题:__proto__的指向(对象创建时的实现方式)

    本文链接:https://www.haomeiwen.com/subject/epbscctx.html