Skip to Content
JavaScriptnew操作符的原理

new 操作符做了什么

  1. 在内存中创建一个新对象。
  2. 将新对象内部的 proto 赋值为构造函数的 prototype 属性。
  3. 将构造函数内部的 this 被赋值为新对象(即 this 指向新对象)。
  4. 执行构造函数内部的代码(给新对象添加属性)。
  5. 如果构造函数返回非空对象,则返回该对象。否则返回 this。
// 使用 var 避免兼容性问题 function myNew(func) { // 创建一个空对象,并且指定原型为func.prototype(obj.__proto__ === func.prototype) var obj = Object.create(func.prototype); var args = Array.prototype.slice.call(arguments, 1); // 执行构造函数,并且将this指向obj var res = func.apply(obj, args); // 返回新对象 return res instanceof Object ? res : obj; } function Person(name, age) { this.name = name; this.age = age; } var person = myNew(Person, "name", 18);
// ES6 function myNew(func, ...args) { // 创建一个空对象,并且指定原型为func.prototype(obj.__proto__ === func.prototype) var obj = Object.create(func.prototype); // 执行构造函数,并且将this指向obj var res = func.apply(obj, args); // 返回新对象 return res instanceof Object ? res : obj; }
Last updated on