首先,new 是JavaScript用来实例化一个对象的关键字,后边跟着构造函数,例如:
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
console.log(this.name)
}
var per = new Person("小黑不黑");
per.getName(); // 小黑不黑
那么,new究竟做了什么事呢?
- 新建一个空对象
- 空对象的 proto 属性指向构造函数的 prototype
- 执行构造函数
- 返回这个对象
模拟代码实现如下
myNew = function(){
const instance = Object.create(null);
// 获取myNew函数传入的第一个参数,即构造函数
const _constructor = Array.prototype.shift.call(arguments);
// 空对象_proto_属性指向构造函数的原型
instance._proto_ =_ constructor.prototype;
_constructor.apply(instance,arguments);
return instance;
}
// =========================测试==============================
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
console.log(this.name)
}
const per = myNew(Person,"小黑不黑");
const per2 = new Person("小黑不黑");
console.log(per);
console.log(per2);
执行结果
网友评论