美文网首页
【JS】new 一个对象具体做了什么

【JS】new 一个对象具体做了什么

作者: 沫之 | 来源:发表于2019-02-13 11:20 被阅读0次
   function Person () {  
        this.name = name;  
        this.age = age;  
        this.job = job;  
        this.sayName = function () {  
            return this.name;  
        }
  }  
  var person = new Person("tom", 21, "WEB");  
  console.log(person.name)

使用关键字new创建新实例对象经过了以下几步:

1、创建一个新对象,如:var person = {};

2、新对象的proto属性指向构造函数的原型对象。

3、将构造函数的作用域赋值给新对象。(也所以this对象指向新对象)

4、执行构造函数内部的代码,将属性添加给person中的this对象。

5、返回新对象person。

  var person = {};  
  person._proto_ = Person.prototype;//引用构造函数的原型对象  
  Person.call(person);//将构造函数的作用域给person,即:this值指向person  

  Function.methos("new", function () {  
     //新创建一个对象,它继承了构造器的原型对象。  
     var that = Object.create(this.prototype); //此时,this是指向Function构造器的。  
     //调用构造器,绑定this对象到新对象that上  
     var other = this.apply(that, argument); //此时,this对象指向that对象。  
     //如果它的返回值不是一个对象,就返回新的对象。  
     return (typeof other === "object" && other) || that;  
 });  

通过new关键字创建某构造函数的新实例对象,就是将原型链与实例的this联系起来,this指向这个新对象,同时也指向这个构造函数,并且this对象还是这个构造函数的实例。如果没有使用new操作符,直接用构造函数创建新实例对象,那么this对象就指向了window对象,不会指向这个新对象的,不管给这个新对象添加什么属性,都没有用,是直接添加到了window对象上了。

相关文章

网友评论

      本文标题:【JS】new 一个对象具体做了什么

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