私はPostboxアドオンを作成しようとしています(Postboxは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();
郵便受けが更新されたときに、私はこのコードの原因を変更することはできません、コードは、元のソースに戻すだろうと、それを維持するために、痛みになります。
次は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'メソッドをテストしましたが、どちらもうまくいきました:) –