• 第七章 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定义的属性有什么区别?(答案我们在下章揭示)

  • 相关阅读:
    【转】SQL时间函数
    C#操作Word完全方法
    出水芙蓉,风华绝代记民国才女林徽因
    梅超风:我就是那个多年以前的女子
    厉胜男
    南海恶神
    挪窝
    吴若权——洛可可动画电影馆
    美的慢箭
    机械公敌(I, Robot) 场景设定
  • 原文地址:https://www.cnblogs.com/blowfish/p/3247372.html
Copyright © 2020-2023  润新知