underscore 1.7 _.bind函数源码疑惑

这几天在阅读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)));
海绵宝宝撒
浏览 279回答 2
2回答

呼唤远方

正常情况下不应该都会跳过的么?这个问题可以简化下面这段代码:bound=function(){returnthisinstanceofbound;}在什么情况下会返回true在什么情况下会返回false。这个代码一看就可以知道,只要是正常的调用,诸如bound()之类,函数内部的this肯定是其它对象的。但是当newbound这种调用的时候,内部指针的对象就发生变化了,指向bound了,这个时候就会返回true了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript