JavaScript 深入之 new 的模拟实现
wengjq opened this issue · comments
wengjq commented
function new() {
var obj = new Object(),
var Constructor = [].shift.call(arguments);
obj.__proto__ = Constructor.prototype;
var ret = Constructor.apply(obj, arguments);
return typeof ret === 'object' ? ret : obj;
};
function new() {
var obj = new Object();
Constructor = [].shift.call(arguments);
// 寄生继承
var F = function () {};
F.prototype = Constructor.prototype;
obj = new F();
var ret = Constructor.apply(obj, arguments);
return typeof ret === 'object' ? ret : obj;
};
发生看如下四步操作:
- 创建一个新的对象,这个对象的类型是 object 。
- 该对象的 prototype 设置为构造器的 prototype 属性,即 this.prototype = Foo.prototype (伪代码)
- 执行构造器函数。
- 如果构造器函数有返回值,则以该对象作为返回值。若没有 return 或 return 了基本类型,则将上述的新对象作为返回值。