0

以下の例には、いくつかの書式設定関数と、フィールドと書式設定関数の間をマッピングするオブジェクトが含まれています。

MyObject = function() {};
MyObject.prototype.formatters = {
    'money': function(value) { return "€" + value },
    'hyperlink': function(value) { return "<a href='"+value+"'>"+value+"</a>";
}
MyObject.prototype.fieldFormatters = {
    'field1': this.formatters.money,
    'field2': this.formatters.hyperlink
}

残念ながら内の文脈fieldFormatterswindow評価時のものなので参考にはなりませんthis.formatters。この問題を参照するための代替方法this.formattersまたはより良いアプローチはありますか?

4

2 に答える 2

1

prototypeインスタンスではなく、を参照する必要があります。

MyObject.prototype.fieldFormatters = {
    'field1': MyObject.prototype.formatters.money,
    'field2': MyObject.prototype.formatters.hyperlink
};
于 2013-03-11T17:57:44.093 に答える
1

関数のみがコンテキストで実行されます。

MyObject = function() {};
MyObject.prototype.formatters = {
    'money': function(value) { return "&euro;" + value },
    'hyperlink': function(value) { return "<a href='"+value+"'>"+value+"</a>";
}
MyObject.prototype.getFieldFormatters = function () {
    // here this is instance of MyObject having correct __proto__
    return {
        'field1': this.formatters.money,
        'field2': this.formatters.hyperlink
    }
}

しかし、あなたはトリックを行うことができます:ゲッターを使用してください:

Object.defineProperty(MyObject.prototype, "fieldFormatters", {get : function () {
    // here this is instance of MyObject having correct __proto__
    return {
        'field1': this.formatters.money,
        'field2': this.formatters.hyperlink
    }
}})
于 2013-03-11T17:59:03.693 に答える