function _new(target,...args){
// 定义一个返回的对象
let obj = {};
if(target.prototype !== null){
// 对象的原型对象指向目标的构造函数
obj = Object.create(target.prototype);
}
// 将this指针指向返回的对象
const result = target.apply(obj,args);
if((typeof result === ('object' || 'function')) && result !== null){
console.log("返回值:"+result)
// 如果返回值是function或者object(不是null),返回返回值;
return result;
}
return obj;
}
function Person (name,age){
this.name = name;
this.age = age;
this.say = function () {
console.log("I am " + this.name)
}
return 1;
}
//通过new创建构造实例
let person1 = new Person("Curry",18);
console.log(person1.name); //"Curry"
console.log(person1.age); //18
person1.say(); //"I am Curry'
console.log(person1);
//通过realize()方法创造实例
let person2 = _new(Person,"Curry",18);
console.log(person2.name); //"Curry"
console.log(person2.age); //18
person2.say();
console.log(person2);
手写Js代码 (1) ------ new方法
最新推荐文章于 2025-06-12 17:51:16 发布
本文探讨了JavaScript中构造函数的实现原理,通过自定义new操作符来模拟构造函数的过程,展示了如何创建对象实例并正确处理构造函数的返回值。同时,对比了自定义new与标准new操作符在实例化过程中的异同。
498

被折叠的 条评论
为什么被折叠?



