1.
1 | var Func=function(){ |
new共经过了4几个阶段
1、创建一个空对象1
varobj=new Object();
2、设置原型链
1 | obj.__proto__= Func.prototype; |
3、让Func中的this指向obj,并执行Func的函数体。
1 | var result =Func.call(obj); |
4、判断Func的返回值类型:
如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。
1 | if (typeof(result) == "object"){ |
2.第二种解析
1 | function create() { |
Arguments对象有一个callee 属性,可以获取当前函数,这个属性在arguments的第一个位置 ,所以 [].shift.call(arguments) 将arguments转为数组后调用shift, 拿到第一个元素 callee