我收到一个仅限Safari的错误:TypeError:'...}附近的表达式结果.bind(this))...''[undefined]不是函数。
这些是第88-92行:
$(this.options.work).each(function(i, item) {
tmpItem = new GridItem(item);
tmpItem.getBody().appendTo($("#" + this.gridId));
this.gridItems.push(tmpItem);
}.bind(this));
任何想法导致了什么?
答案 0 :(得分:10)
较早版本的Safari不支持bind
。如果您尝试此操作(http://jsfiddle.net/ambiguous/dKbFh/):
console.log(typeof Function.prototype.bind == 'function');
你会在较旧的Safaris中获得false
,但在最新的Firefox和Chrome中获得true
。我不确定Opera或IE,但有一个兼容性列表(可能是也可能不准确):
您可以尝试使用something like this修补自己的版本:
Function.prototype.bind = function (bind) {
var self = this;
return function () {
var args = Array.prototype.slice.call(arguments);
return self.apply(bind || null, args);
};
};
但请先检查Function.prototype.bind
是否存在。
答案 1 :(得分:1)
或支持部分申请的bind
垫片:
if (!Function.prototype.bind) {
Function.prototype.bind = function(o /*, args */) {
// Save the this and arguments values into variables so we can // use them in the nested function below.
var self = this, boundArgs = arguments;
// The return value of the bind() method is a function
return function() {
// Build up an argument list, starting with any args passed
// to bind after the first one, and follow those with all args // passed to this function.
var args = [], i;
for(i = 1; i < boundArgs.length; i++) args.push(boundArgs[i]);
for(i = 0; i < arguments.length; i++) args.push(arguments[i]);
// Now invoke self as a method of o, with those arguments
return self.apply(o, args);
};
};
}