对于:
var obj = new Base();
new操作符具体干了什么呢?其实很简单,就干了三件事情。
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
- 第一步,我们创建了一个空对象obj
- 第二步,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
- 第三步,我们将Base函数对象的this指针替换成obj,然后再调用Base函数.
- 最后,考察第三步返回的返回值,如果无返回值或者返回一个非对象值,则将obj返回作为新对象;否则会将返回值作为新对象返回。
网友评论