一、new的特性
- 返回一个对象,对象的__proto__指向构造函数的prototype。
- 构造函数的this指向返回的对象
- 构造函数可以传递参数
二、new的实现
function Person(name = 'Li', age = '20') {
this.name = name;
this.age = age
}
Person.prototype.gender = 'male';
Person.prototype.say = function () {
console.log(`I'm ${this.name},age ${this.age},gender ${this.gender}.`);
}
// 自定义new,参数为若干个,第一个参数必须为函数。
const myNew = function (...arg) {
// 对参数进行解构,第一个参数未构造函数,剩余参数为构造函数的参数
const [fun, ...params] = arg;
if (typeof fun !== "function") {
return alert('第一个参数必须为函数');
}
// 创建一个对象
const obj = {};
// 对象的__proto__指向构造函数的prototype
obj.__proto__ = fun.prototype;
// 改变构造函数的this指向,并传递参数
fun.call(obj, ...params);
// 返回对象
return obj;
}
// 构造函数传参测试
const amy = myNew(Person, 'Amy', '18');
// 构造函数不传参测试
const li = myNew(Person);
console.log(amy);
console.log(li);
测试结果:
如果对你有帮助,可以👍+关注哦~~我们一起学前端