js中new操作符到底在做什么

问题缘起

代码展示

var Human=function(gender){
  this.gender=gender;
  //debugger;
  Human.prototype={
    test:function(){
      alert("test")
    }
  }
}
var human=new Human("male");
console.log(typeof human.test)

解析

new 操作符的四步骤

1. var o = new Object();//首先创建一个空对象
2. o.__proto__ = A.prototype;//将空对象的原型链指向A对象的prototype属性
3. A.call(o)//调用A方法,并将其中的this指向设置为刚创建的空对象。(由于这里this是指向o,可以把什么this.name/getName绑定到o上)
4. 把这个o返回给a;//完成var a = new A()的过程.

new操作符执行到第三步才会把构造函数的原型链设定。但是第二步就需要把构造函数的原型链给实例的__proto__属性,而此时外部并没有定义原型链。因而自然没有test方法。

所以原型链这种东西应该写道外面去。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2016.9.9 第6章 原型与面向对象 原型虽然是定义对象的一种很方便的方式,但它的本质依然是函数特性。 使用原...
    如201608阅读 3,933评论 0 0
  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 4,547评论 0 1
  • 09.05 高温,养生操、肩颈、滚背。 09.04 高温,养生操、肩颈、欣欣向荣。 09.03 继续高温,窝在室内...
    浩妈崔崔阅读 1,365评论 0 0
  • 记忆是单行轨,幽远而冗长。 ...
    车马正简阅读 2,761评论 0 0
  • 早起4:30就起床了,还是继续筹备读书节!读书节实施方案,读书节议程,读书节节目单,6:30前全部完成了,很是佩服...
    甲午之印阅读 1,430评论 0 0