new命令原理
使用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 43
| 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)
|