Риск использования встроенного метода-прототипа Array на других объектах? - PullRequest
1 голос
/ 04 октября 2011

Я сделал много специальных событий jQuery, и сейчас я пытаюсь сделать их плагинами jQuery.

Мой код:

$.each("down move hold up tap swipeUp swipeDown swipeLeft swipeRight drag dragCell".split(" "), function(key, value) {
    $.fn[value] = function() {
        var args = [value].concat(Array.prototype.splice.call(arguments,0));
        if ( $.isFunction(arguments[0]) || $.isFunction(arguments[1]) ) {
            return this.bind.apply(this, args);
        } else {
            return this.trigger.apply(this, args);
        }
    };
});

Где я зацикливаю массив имен(вниз, перемещение, удержание, вверх и т. д.) и динамически создает плагины jQuery.

Как вы можете видеть значение взятия и имя плагина после него: $.fn.down, $.fn.move и т. д...

Затем я беру аргументы и перебираю его через собственный метод массива.

Array.prototype.splice.call(arguments, 0);

Возвращает собственный массив Array [arguments[0], arguments[1], ...]

И concat itс value и заканчивается:

["down", arguments[0], arguments[1], ...],
["move", arguments[0], arguments[1], ...],
....

Есть ли риск сделать это (используя тогда собственные методы и другие объекты, которые имелись в виду), и есть ли вероятность потери данных?

Как вы можете видеть, это портит методы jQuery bind и trigger.Это также опасно?

1 Ответ

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

Хорошо, я закрываю этот вопрос: способ добиться того же для аргументов:

Благодаря raynos

var toArray = function (obj) {
  var ret = new Array(obj.length);
  for (var i = 0, len = obj.length; i < len; i++) {
    ret[i] = obj[i];
  }
  return ret;
}

toArray(arguments);
...