Правильная передача this
Есть код:
var self = this;
this.editor.commands.addCommand({
name: "gotoline",
bindKey: {win: "Ctrl-L", mac: "Command-Option-L"},
//exec: function (){ self.showGotoLineWindow.call(self) },
exec: this.showGotoLineWindow,
readOnly: true
});
Тоесть для exec нужно указать метод showGotoLineWindow моего объекта, и чтобы он вызывался с this, указывающем на мой объект. |
var self = this;
this.editor.commands.addCommand({
name: "gotoline",
bindKey: {win: "Ctrl-L", mac: "Command-Option-L"},
//exec: function (){ self.showGotoLineWindow.call(self) },
exec: function(){
self.showGotoLineWindow
},
readOnly: true
});
А внутри своего this.editor.commands.addCommand.exec вот так:
this.editor.commands.addCommand.exec = function(func)
{
func();
}
т.е. в exec передаешь указатель на анонимную функцию
function(){
self.showGotoLineWindow
},
и там же ее вызываешь. Все вместе это называется callback-функция. |
Я не могу изменить exec, он реализован в сторонней "библиотеке". Кроме того, ваш вариант выглядит неработоспособным какимто..
|
так, что ли?
var self = this;
self.editor.commands.addCommand({
name: "gotoline",
bindKey: {
win: "Ctrl-L",
mac: "Command-Option-L"
},
exec: {
showGotoLineWindow: function() {
self.showGotoLineWindow.call( self );
}
},
readOnly: true
});
|
А как называется сторонняя библиотека?
|
вот так должно быть правильно(Вы забыли про аргументы и результат функции
exec: function () {
return self.showGotoLineWindow.apply(self, arguments);
}
|
Цитата:
Тоесть мой исходный быдлокодерский закомментированный вариант и есть единственно верный? Мне оно какимто кривым казалось :) Тоесть закомментированная строчка делает то что мне нужно, но я думал ее можно упростить както... |
Maxmaxmахimus,
А как же IE?) |
Цитата:
Правда еще не проверял. ACE при себе имеет целый комплект костылей - ща поглядел - в коде фигурирует такой код: Код:
if (!Function.prototype.bind) {OFFTOP че такое "слупки" ? |
| Часовой пояс GMT +3, время: 02:04. |