//根据以下代码可以总结出,new关键字做了啥
// new有改变this指向
// 创建一个空对象
// 将创造出来的空对象的原型对象指向构造函数的原型对象(不懂的可以找找
//原型链还有继承的资料,或者等我下篇推文)
function Person(name,age){
this.name = name
this.age = age
}
// Person()
// console.log(window);
//可见,new有改变this指向,和创建一个空对象的作用
function _new(...rest){
let content = {}
let fn = rest.shift() //弹出数组第一个元素
content.__proto__ = fn.prototype
fn.call(content,...rest)
//改变this指向,
//call传入多个参数要分开传,
//apply(借用的对象,【】)参数以数组的形式传入,
//bind()参数分开传,只起绑定作用不会立即调用
return content
}
console.log( _new(Person,'lisi',22));
console.log(new Person('小王',11));
//打印结果看似正常,但是对比之后还存在一个问题,他的对象原型—__proto__所指向的构造函数不是Person()
//所以要把生成的对象的原型指向构造函数的原型对象content.__proto__ = fn.prototype
javaSript中的new关键字做了什么?
最新推荐文章于 2024-05-17 13:52:13 发布