使用 new 命令时,它后面的函数依次执行下面的步骤:
- 创建一个空对象,作为将要返回的实例对象。
- 将这个空对象的原型,指向构造函数的 prototype 属性。
- 将这个空对象赋值给函数内部的 this 关键字。
- 开始执行构造函数内部的代码。
- 如果构造函数内有返回值且为对象类型,则返回该对象,否则返回上面创建的实例对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| function Person(name, age) { this.name = name; this.age = age; }
function _new() { var args = [].slice.call(arguments); var constructor = args.shift(); var context = Object.create(constructor.prototype); var result = constructor.apply(context, args); return typeof result === 'object' && result != null ? result : context; }
function _new2( constructor, params) { var context = Object.create(constructor.prototype); var result = constructor.apply(context, params); return typeof result === 'object' && result != null ? result : context; }
var actor = _new(Person, '张三', 28); console.log(actor.name);
var actor2 = _new2(Person, ['李四', 29]); console.log(actor2.name);
var actor3 = new Person('王五', 30); console.log(actor3.name);
|
本文转自https://xugaoyi.com/pages/8143cc480faf9a11,作者:xugaoyi