Я пытаюсь создать аддон почтового ящика (почтовый ящик - почтовый клиент на основе Thunderbird), и у меня небольшая проблема. Я далек от того, чтобы быть экспертом Javascript, и я не могу понять проблему за этим ...Как правильно расширить функцию Javascript?
Я пытаюсь расширить некоторую функцию объекта из кода почтового ящика. Код довольно большой, поэтому я попытался создать небольшой пример, чтобы продемонстрировать свою проблему. Следующий код представляет собой образец исходного Postbox код структуры:
FolderTreeView.prototype = {
init: function FTV__init() {
alert("init");
},
_ensureValidRow: function FTV__ensureValidRow(aRow) {
alert("_ensureValidRow");
},
getCellProperties: function FTV_getCellProperties(aRow, aColumn, aProperties) {
this._ensureValidRow(aRow);
}
}
function FolderTreeView() {
this._tree = null;
this.init();
}
var gFolderView = new FolderTreeView();
Я не могу изменить этот код причины, когда Postbox обновляется, код будет вернуться к первоначальному источнику, и это будет боль, чтобы поддерживать это.
Ниже мой собственный код, пытаясь расширить getCellProperties
функцию:
MyExtension = {
init: function() {
MyExtension.FolderIcon.load();
},
FolderIcon: {
load: function() {
var oGetCellProperties = gFolderView.getCellProperties;
gFolderView.getCellProperties = function FTV_getCellProperties(aRow, aColumn, aProperties) {
oGetCellProperties(aRow, aColumn, aProperties);
}
gFolderView.getCellProperties(null, null, null);
}
}
}
Теперь oGetCellProperties
звонит первоначальную функцию, которая, в свою очередь, пытается вызвать this._ensureValidRow
но терпит неудачу. Консоль ошибок сообщает, что:
this._ensureValidRow is not a function
Это отличный ответ; Мне нравятся дополнения ES5, но OP может захотеть проверить эту таблицу, чтобы узнать, поддерживаются ли его целевые браузеры. http://kangax.github.com/es5-compat-table/ –
Это не для запуска в браузере как таковом, это расширение Postbox/Thunderbird. Я просто протестировал методы 'bind' и' call' в расширении и оба отлично работали :) –