美文网首页让前端飞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