zoukankan      html  css  js  c++  java
  • 第七章 new的三步曲

    这章是本系列文章的重点,这章揭示了js对象的真正本质

    看下面的事例

    var a = new  b();
    
    等价于
    
    ①var a={};
    
    ②a.__proto__=b.prototype;
    
    ③b.call(a);

    上面的事例揭示了 用new的方法 创建对象的过程,下面问你来详细分析下这个过程

    我们首先定义一个函数

    function person(){
    
    this.pname="lily";
    
    this.psay=function(){
    
    console.log("hello word");
    
    }
    
    }
    
    person.prototype.pwrite=function(){
    
    console.log("I am lily");
    
    }

    下面我们来定义一个对象

    var myp=new person();

    然后我们按着三步曲,一步一步的去看,每步都做了什么

    第一步

    var myp={};

    我想这步就不需要解释了,就是定义了一个空对象

    第二步

    myp.__proto__=person.prototype;

    注意: 这个地方大家姑且这样理解,__proto__为对象原型链)

    .....

    第三步

    person.call(myp);
    
    这步等价于下面
    
    myp.pname="lily";
    
    myp.psay=function(){
    
    console.log("hello word");
    
    }

    到这里new的三步曲已经完毕,大家接下来可以自己写程序验证下。这里大家思考一个问题:

    在构造函数里面 用this.xx定义的属性和object.prototype.xxx定义的属性有什么区别?(答案我们在下章揭示)

  • 相关阅读:
    React跨域问题解决
    PBFT性能会下降? 各种算法的对比。
    ssl证书原理
    UTXO是什么?
    以太访solidity常用的函数有哪些
    ERC720和erc721的区别
    椭圆曲线加密和rsa对比
    将pdf书籍变成横排的方法
    童年回忆(1)
    Inheritance
  • 原文地址:https://www.cnblogs.com/blowfish/p/3247372.html
Copyright © 2011-2022 走看看