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返回作为新对象;否则会将返回值作为新对象返回。