js new关键字

new关键字作了什么

function Animal(name){
    this.name = name;
}
 var cat = new Animal("cat")
复制代码

Animal 自己是一个普通函数,但当经过new来建立对象时,Animal 就是构造函数。html

JS引擎执行这句代码时,在内部作了不少工做,用伪代码模拟其内部流程以下:bash

new Animal('cat') = {
   var obj = {};
   obj.__proto__ = Animal.prototype;
   var result = Animal.call(obj,"cat");
   return typeof result === 'object'? result : obj;
}

复制代码
  1. 建立一个空对象 obj;
  2. 把 obj 的__proto__ 指向构造函数 Animal 的原型对象 prototype,此时便创建了 obj 对象的原型链:obj->Animal.prototype->Object.prototype->null
  3. 在 obj 对象的执行环境调用 Animal 函数并传递参数 “ cat ” 。 至关于 var result = obj.Animal("cat")。 当这句执行完以后,obj 便产生了属性 name 并赋值为 "cat"。关于 call 的用法请参考: 深刻理解 call、apply 和 bind
  4. 考察第 3 步的返回值,若是无返回值 或者 返回一个非对象值,则将 obj 做为新对象返回;不然会将 result 做为新对象返回。

根据以上过程,咱们发现 cat 其实就是【4】的返回值,所以咱们对 cat 对象的认知就多了一些app

原文连接函数

相关文章
相关标签/搜索