jQuery имеет эквивалент dojo.hitch ()?

Простите мое незнание, поскольку я не так знаком с jQuery. Существует ли эквивалент dojo.hitch ()? Это возвращает функцию, которая, как гарантируют, будет выполнена в данном объеме.

- редактирование - Согласно просьбе, вот пример. Я использую помеху очень часто, чтобы гарантировать, что обратные вызовы выполняются в правильном объекте. Например, скажем, мне назвали служебный метод doSomethingAsync и я передаю его функция обратного вызова. С помехой я могу удостовериться, что функция выполняется в конкретном объеме, даже если служебный метод выполняет вызовы ajax и т.д:


expectedScopeObj = {
   flag: true,
   callback: function(){console.debug(this.flag);},
   main: function() {
     // without hitch the callback function would not find flag  
     core.util.doSomethingAsync(dojo.hitch(this, this.callback));
   }
}

Без помехи функция обратного вызова могла возможно быть выполнена в другом объеме, и ошибка будет брошена с this.flag быть неопределенным. Однако с помехой это, как гарантируют, будет выполнено в execptedScopeObj.

16
задан Lightbeard 24 January 2015 в 15:28
поделиться

3 ответа

То, как вы это делаете, прекрасно:

PostType[] q = new PostType[qArray.Length];
for (int i = 0; i < q.Length; i++)
    q[i] = new PostType();

Одна вещь, которую я изменил - переименовать индекс, поддающийся проверке, из x в i, так как мне это легче прочитать, хотя это субъективная вещь.

Другое, что я изменил - условие окончания цикла для должно зависеть от длины q, а не от длины qArray. Причина этого в том, что с вашим методом, если вы решите изменить первую строку, чтобы использовать другую длину вместо qArray.Length, вы должны помнить, чтобы изменить вторую строку тоже. С измененным кодом нужно только обновить первую строку кода, а остальные будут работать без изменений.

Вы также можете сделать это с помощью Linq:

PostType[] q = Enumerable.Range(0, qArray.Length)
                         .Select(_ => new PostType())
                         .ToArray();

Но для больших массивов это будет медленнее и не очень легче читать на мой взгляд (особенно если вы не видели его раньше). Думаю, на твоем месте я бы придерживался первого метода.

-121--3159707-

Значение NULL < T > является еще одним невероятным удобством. Особенно удобен синтаксис ? , как в int? , сокращенно от Nullable < int > .

-121--2878110-

[ ADMIN EDIT : Обратите внимание на гораздо более популярный ответ, приведенный ниже. - danorton]

Я бы пошел на function.bind , который будет стандартным способом сделать это в будущих версиях JavaScript. Наряду с исправлением это позволяет передавать аргументы целевым функциям.

До тех пор, пока все браузеры не поддержат его, вы можете взломать поддержку в себе .

6
ответ дан 30 November 2019 в 15:30
поделиться

Нет. Не в 1.3.2, по крайней мере, как я не знаю около 1.4. Однако есть некоторые плагинов :

(function($) {
  $.fn.hitch = function(ev, fn, scope) {
    return this.bind(ev, function() {
      return fn.apply(scope || this, Array.prototype.slice.call(arguments));
    });
  };
})(jQuery);  
2
ответ дан 30 November 2019 в 15:30
поделиться

Функция . BIND , упомянутая бобинсом, является довольно полезным инструментом. Вы можете использовать его, чтобы переписать функцию Chitch довольно просто:

// The .bind method from Prototype.js 
if (!Function.prototype.bind) { // check if native implementation available
  Function.prototype.bind = function(){ 
    var fn = this, args = Array.prototype.slice.call(arguments),
        object = args.shift(); 
    return function(){ 
      return fn.apply(object, 
        args.concat(Array.prototype.slice.call(arguments))); 
    }; 
  };
}

jQuery.hitch = function(scope, fn) {
  if (typeof fn == "string") fn = scope[fn];
  if (fn && fn.bind) return fn.bind(scope);
};

, по крайней мере, на основе страницы доктора, вы связанные, вот как я видел функцию, работающую ...

1
ответ дан 30 November 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: