TypeError: Результат выражения рядом с '...}. Bind (this)) ...' [undefined] не является функцией - PullRequest
4 голосов
/ 31 октября 2011

Я получаю только ошибку Safari: Ошибка типа: Результат выражения рядом с '...}. 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));

Есть идеи, что вызывает это?

Ответы [ 2 ]

10 голосов
/ 31 октября 2011

Старые версии Safari не поддерживают bind. Если вы попробуете это (http://jsfiddle.net/ambiguous/dKbFh/):

console.log(typeof Function.prototype.bind == 'function');

вы получите false в старых Safaris, но true в последних версиях Firefox и Chrome. Я не уверен насчет Opera или IE, но есть список совместимости (который может быть или не быть точным):

http://kangax.github.com/es5-compat-table/

Вы можете попробовать исправить свою собственную версию с помощью примерно так :

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 голос
/ 13 апреля 2014

или для 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); 
        };
    }; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...