这几天在阅读underscore的源码,看到函数方法的时候,遇到一点问题。请大家,帮个忙啦~underscore1.7bind函数源码javascript_.bind=function(func,context){varargs,bound;if(nativeBind&&func.bind===nativeBind)returnnativeBind.apply(func,slice.call(arguments,1));if(!_.isFunction(func))thrownewTypeError('Bindmustbecalledonafunction');args=slice.call(arguments,2);bound=function(){if(!(thisinstanceofbound))returnfunc.apply(context,args.concat(slice.call(arguments)));Ctor.prototype=func.prototype;varself=newCtor;Ctor.prototype=null;varresult=func.apply(self,args.concat(slice.call(arguments)));if(_.isObject(result))returnresult;returnself;};returnbound;};问题实际使用时,哪一种情况会跳过下面的if判断,执行后面的代码?能否举个实例?javascriptif(!(thisinstanceofbound))returnfunc.apply(context,args.concat(slice.call(arguments)));
2 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
正常情况下不应该都会跳过的么?这个问题可以简化下面这段代码:bound=function(){returnthisinstanceofbound;}在什么情况下会返回true在什么情况下会返回false。这个代码一看就可以知道,只要是正常的调用,诸如bound()之类,函数内部的this肯定是其它对象的。但是当newbound这种调用的时候,内部指针的对象就发生变化了,指向bound了,这个时候就会返回true了。
添加回答
举报
0/150
提交
取消