new 一个对象具体做了什么

在这里插入图片描述
使用关键字new创建新实例对象经过了以下几步:
1、创建一个新对象,如:var person = {};
(新对象的proto属性指向构造函数的原型对象。)
2、将构造函数的作用域赋值给新对象。(也所以this对象指向新对象)
3、执行构造函数内部的代码,将属性添加给person中的this对象。
4、返回新对象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对象上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章