- 开辟了一个内存存放新创建的对象,创建实例对象
- 将构造函数里的this执行实例对象
- 给实例对象新增属性和方法
- 隐式的返回了实例对象
-
/** new产生一个新对象; 拿到传入的参数中的第一个参数,即构造函数Constructor; 执行构造函数,并将this指向创建的空对象obj; 将传入构造函数的参数,在obj上下文中执行一遍; 如果构造函数返回一个对象,则直接返回这个对象,若构造函数没有返回这个对象,那么就返回obj */ function myNew() { const obj = new Object(); Constructor = Array.prototype.shift.call(arguments); obj.__proto__ = Constructor.prototype; let res = Constructor.apply(obj, arguments); return res instanceof Object == true ? res : obj } // 检验,这是没有返回值的检验 // function Person(name, age) { // this.name = name; // this.age = age; // console.log('执行') // return '12' // } // let zhangsan = myNew(Person, '张三', 12) // console.log(zhangsan) // 这是构造函数有返回值的检验 function Person(name, age) { this.name = name; return { age: age } } let zhangsan = myNew(Person, '张三', 12) console.log(zhangsan)
02-27
1325