new 过程

2017-06-29  本文已影响12人  幸福幸福幸福

【如果你对js的this还不了解,请先阅读:JS作用域和this关键字
【如果你不了解JS原型链,请先阅读:JS原型和原型链

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

第一步:创建一个空对象obj;
第二步:把obj的proto指向Animal的原型对象prototype,此时便建立了obj对象的原型链:obj-->Animal.prototype-->Object.prototype-->null。
第三步:在obj对象的执行环境调用Animal函数并传递参数“cat”。 相当于var result = obj.Animal("cat")。
当这句执行完之后,obj便产生了属性name并赋值为"cat"。
第四步:考察第3步返回的返回值,如果无返回值或者返回一个非对象值,则将obj返回作为新对象;否则会将返回值作为新对象返回。

上一篇下一篇

猜你喜欢

热点阅读