new命令简化的内部流程
构造函数返回对象的一些问题:
function fn(name,age){ this.name = name; this.age = age; //return 23; 忽略数字,直接返回原有对象 //return {};如果是对象直接顶替原有默认返回的对象 //如果没有return 则默认返回对象 }
new命令简化的内部流程,可以用下面的代码表示
function _new(/*构造函数*/constructor,/*构造函数参数*/params){ /*把参数转化为数组*/ var args = [].slice.call(arguments) /*分理出构造函数*/ var constructor = args.shift() /*创建一个空对象,并继承构造函数的原型*/ var context = Object.create(constructor) /*执行构造函数*/ var result = constructor.applay(context,params) //返回结果对象,就直接返回,否则返回 context 对象,如果构造函数有return 返回值,则result有值 return (typeof result === 'Object' result != null) ? result : context }