当使用 new 的时候发生了什么
先上代码
// var obj = new Func()
function _new() {
//1.拿到传入的参数中的第一个参数,即构造函数名Func
var Func = [].shift.call(arguments)
//2.创建一个空对象obj,并让其继承Func.prototype
var obj = Object.create(Func.prototype)
//3.执行构造函数,并将this指向创建的空对象obj
Func.apply(obj,arguments)
//4.返回创建的对象obj
return obj
}
不禁想问,使用 Object.create
又发生了什么?
不管了,上代码
function nativeCreate(prototype) {
var Ctor = function() {}
Ctor.prototype = prototype
var result = new Ctor
return result
}
居然又出现了 new,将上文的 _new
函数改造一下
// var obj = new Func()
function _new() {
//1.拿到传入的参数中的第一个参数,即构造函数名Func
var Func = [].shift.call(arguments);
//2.创建一个空对象obj
var obj = {}
//3. 让其继承Func.prototype
obj.__proto__ = Func.prototype
//4.执行构造函数,并将this指向创建的空对象obj
Func.apply(obj,arguments)
//5.返回创建的对象obj
return obj
}