- 创建空对象;
var obj = {}; - 将这个新对象的 __proto__ 指向构造函数的 prototype 对象;
obj.__proto__ = constructor.prototype; - 绑定this并执行构造函数;
- 如果构造函数返回了一个对象,那么返回这个对象;否则,返回新创建的对象
function myNew(constructor, ...args) { // 1.创建一个新的空对象 let obj = {}; // 2.将这个新对象的 __proto__ 指向构造函数的 prototype 对象 obj.__proto__ = constructor.prototype; // 3.绑定this并执行构造函数 let result = constructor.apply(obj, args); // 4.如果构造函数返回了一个对象,那么返回这个对象;否则,返回新创建的对象 return typeof result === 'object' && result !== null ? result : obj; } // 测试自定义的 myNew 函数 function people(name, age) { this.name = name; this.age = age; this.greet = function () { console.log(`我的名字是 ${this.name},年龄是 ${this.age}岁`); }; return 123 } people.prototype.id=123 const p = myNew(people,'小明',30) //执行这一步控制台打印 ,'执行了Person函数',表示Person函数执行了 p.greet()//打印 my name is 欧文 and I am 30 years old console.log(p.id);//123 表示继承构造函数原型上的属性和方法。 console.log(p.__proto__ === people.prototype);//true
js中new一个对象的过程
于 2024-12-23 20:08:23 首次发布