Правильная передача 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, время: 20:54. |