Простите мое незнание, поскольку я не так знаком с 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
.
То, как вы это делаете, прекрасно:
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 >
.
[ ADMIN EDIT : Обратите внимание на гораздо более популярный ответ, приведенный ниже. - danorton]
Я бы пошел на function.bind
, который будет стандартным способом сделать это в будущих версиях JavaScript. Наряду с исправлением это
позволяет передавать аргументы целевым функциям.
До тех пор, пока все браузеры не поддержат его, вы можете взломать поддержку в себе .
Нет. Не в 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);
Функция . 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);
};
, по крайней мере, на основе страницы доктора, вы связанные, вот как я видел функцию, работающую ...