要自己实现一个new功能,实现要知道new操作符都干了些什么,其实总的来说就四步:
1.创建一个空对象
2.链接到原型
3.绑定this值
4.返回新对象
知道了这些步骤,我们就可以自己模拟实现new方法了
function _new () {
var obj = new Object();
var [func, ...args] = [...arguments];
obj.__proto__ = func.prototype;
var result = func.call(obj,...args);
if(result && ( typeof(result) === 'object' || typeof(result) === 'Function')){
return result;
}
return obj;
}
function Animal(name,age){
this.name = name;
this.age = age;
}
//通过new创建构造实例
let dog1 = new Animal('dog1',2);
console.log(dog1.name) // dog1
console.log(dog1.age)//2
//通过_new方法创造实例
let dog2 = _new(Animal,'dog2',3);
console.log(dog2.name)//dog2
console.log(dog2.age) //3