程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> javascript-underscore.js的bind函數

javascript-underscore.js的bind函數

編輯:編程綜合問答
underscore.js的bind函數

先貼代碼:
var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
if (!(callingContext instanceof boundFunc))
return sourceFunc.apply(context, args);
var self = baseCreate(sourceFunc.prototype);
var result = sourceFunc.apply(self, args);
if (_.isObject(result))
return result;
return self;
};

// Create a function bound to a given object (assigning this, and arguments,
// optionally). Delegates to ECMAScript 5's native Function.bind if
// available.
.bind = function(func, context) {
if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
if (!
.isFunction(func)) throw new TypeError('Bind must be called on a function');
var args = slice.call(arguments, 2);
var bound = function() {
return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
};
return bound;
};
想問下,executeBound(func, bound, context, this, args.concat(slice.call(arguments)))這個裡面的this是否就是指代調用_.bound的對象,然後後面為何要做(!(callingContext instanceof boundFunc))這個判斷,網上查了好久,沒查出來,請高手指導下,非常感謝

最佳回答:


這個得看如何調用的,因為this對象可以通過call和apply進行更改,如果不是通過apply或者call執行調用的,那麼就是指向bound的實例對象了

instanceof是判斷對象是否屬於某一類型。如果你不判斷,可能會出錯。因為要調用這個類型的方法,不是這個類型的實例可能方法不存在而出錯

http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved