下面的示例包含一些格式化函数和一个在字段和格式化函数之间映射的对象。
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
}
不幸的是,评估时fieldFormatters
中的上下文为window
,因此我无法引用this.formatters
。是否有其他方法可以引用this.formatters
或更好地解决此问题?
答案 0 :(得分:1)
您需要返回prototype
,而不是实例:
MyObject.prototype.fieldFormatters = {
'field1': MyObject.prototype.formatters.money,
'field2': MyObject.prototype.formatters.hyperlink
};
答案 1 :(得分:1)
仅在上下文中执行函数。
MyObject = function() {};
MyObject.prototype.formatters = {
'money': function(value) { return "€" + 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
}
}
但你可以做一个技巧:使用getters:
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
}
}})