prototype和new的底层实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了prototype和new的底层实现相关的知识,希望对你有一定的参考价值。

    <script type="text/javascript">
        function A(){
            this.name = "jack";
            this.age = 18;
            height = 180;
            this.action = function(v){
                console.log(this===v);
            }
            
        };
        A.prototype.price = 888888888;
    
//    首先:A的原型链prototype是个对象Object
//    然后:price是对象A原型链prototype的属性
        console.log(A.prototype.price);
//    A是没有price属性的哦
        console.log(A.price);
//    最后:原型链prototype中含有 构造器constructor和原型__proto__
        console.log(A.prototype);
//    原型链的constructor就是构造函数 A
        console.log(A.prototype.constructor);
        console.log(A === A.prototype.constructor);
//    __proto__中含有很多固有属性
        console.log(A.prototype.__proto__);
//    所以说:构造函数属性的使用都是靠 prototype来实现的。


//    那么 new A() 是怎么回事?
//    new A(); 不仅有 prototype的属性,也有
        var a = new A();
//    a除了this包含的属性外还有 __proto__
        console.log(a);
//    a能使用 A的的属性哦
        console.log(a.age);
//    因为a的就是A中的this
        a.action(a);
//    a能使用 A.prototype的属性哦
        console.log(a.price);
//    哎呦。a的原型__proto__和 A的原型链prototype是一样的
//    那么 new A() 是把 a.__proto__引用指向了A.prototype咯???
        console.log(a.__proto__ === A.prototype)
//    综合上面 的结论,那么 a能使用 prototype属性的原因是因为 a原型的引用指向了 A.prototype
//    a能使用A中的属性是因为。A中的this === a;
    </script>

 

以上是关于prototype和new的底层实现的主要内容,如果未能解决你的问题,请参考以下文章

从mixin到new和prototype:Javascript原型机制详解

从mixin到new和prototype:Javascript原型机制详解

从mixin到new和prototype:Javascript原型机制详解

源码时代前端干货分享|new关键字底层原理-执行过程

源码时代前端干货分享|new关键字底层原理-执行过程

js new关键字