JS 高程中的解释javascript
要建立 Person 的新实例,必须使用 new 操做符。以这种方式调用构造函数实际上会经历如下 4 个步骤:
(1) 建立一个新对象;
(2) 将构造函数的做用域赋给新对象(所以 this 就指向了这个新对象);
(3) 执行构造函数中的代码(为这个新对象添加属性);
(4) 返回新对象。
看了这个原理,想试着写下实现过程,虽然不够严谨。至少核心思想是体现出来了。java
模拟实现:app
// 先写一个构造函数 function Person (name){ this.name = name } // myNew 方法实现 function myNew(fn){ let obj = Object.create(fn.prototype) // 建立一个对象,并将构造函数的原型对象赋给新建立的对象,即生成的实例与构造函数的原型对象关联 let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1)) // 函数执行(为该对象赋属性) return obj // 返回该对象 } console.log(p1 instanceof Person) // true console.log(myNew(Person, 'Tom')) // Person{ "name":"Tom" }