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

  • 相关阅读:
    cmd登录系统用户
    Js操作Cookie
    Tomcat 调优方案
    Oracle 服务启动关闭
    Mysql服务启动与关闭
    JSP中的隐含对象
    JSP指令
    Js的String对象
    js排序
    MyBatis系列目录--5. MyBatis一级缓存和二级缓存(redis实现)
  • 原文地址:https://www.cnblogs.com/blowfish/p/3247372.html
Copyright © 2011-2022 走看看