美文网首页
JS中new详解

JS中new详解

作者: wyc0859 | 来源:发表于2022-03-15 10:56 被阅读0次

    new对象底层发生了什么

    function Person(phone, age) {
      this.age = age;
      this.phone = phone;
      this.showone = function () {};
    }
    Person.prototype.docall = function () {
      console.log("电话:", this.phone);
    };
    
    let person = new Person("12344", 23);
    console.log("person", person); //3个属性方法,原型上1个方法,constructor指向Person对象
    console.log("person的类型是:", typeof person);
    //类型是object,并不是person。因为typeof只认识基础类型
    //if (typeof person === "")  //这里的引号会提示有哪些基础类型
    

    new 一个实例对象的底层实际就3步

    1.创建一个 Object 对象

    var obj = {}; //底层实际是new Object();
    console.log("第1步:", obj); //此时:constructor指向Object对象(祖先)
    

    2.让新创建的对象的 proto 变量指向 Person 原型对象空间

    obj.__proto__ = Person.prototype;
    console.log("第2步:", obj); //到这里,第一步打印和现在的打印都变成:原型上1个方法,constructor指向Person对象
    

    3.借用Person构造函数中的为 obj 对象变量增加 age 属性和 phone 属性

    Person.apply(obj, ["12344", 23]); //apply借用
    console.log("第3步:", obj); //可以看到和new出来的对象一模一样,3个属性方法,原型上1个方法,constructor指向Person对象
    

    相关文章

      网友评论

          本文标题:JS中new详解

          本文链接:https://www.haomeiwen.com/subject/mtcddrtx.html