引用实例为'this'在原型对象分配中
Referencing instance as 'this' in prototype object assignment
下面的示例包含一些格式化函数和一个对象,该对象在字段和格式化函数之间进行映射。
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
或更好的方法来解决这个问题?
只在上下文中执行函数。
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
}
}
但是你可以做一个技巧:使用getter:
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
}
}})
您需要引用回prototype
,而不是实例:
MyObject.prototype.fieldFormatters = {
'field1': MyObject.prototype.formatters.money,
'field2': MyObject.prototype.formatters.hyperlink
};
相关文章:
- 为什么在Javascript中将一个对象分配给另一个变量也会更改初始对象
- 在运行时使用预先确定的对象分配变量
- Javascript对象分配gottcha
- 通过程序将对象分配给数组
- AngularJS-对象分配不起作用
- 在PHP中为JSON对象分配标识符/名称
- 对象分配在此angularjs控制器中不起作用
- 对象分配 - 更新特定属性
- 将对象分配给另一个对象并保留原始数据
- ES6 对象分配部分项
- 为每个对象分配一个键
- 将函数中的对象分配给变量或调用 setState 没有这个
- 按对象数组中的值为对象分配等级
- 为什么将其他对象分配给内置对象(例如文档、窗口)没有意义
- 将FileReader内部的结果对象分配给变量
- 为Javascript对象分配函数
- Javascript对象分配'他奇怪的行为
- 了解在 JavaScript 中为对象分配函数
- 为CanvasXpress的Json对象分配Javascript数组值
- 只需使用Immutable.js将对象分配给变量,即可克隆新对象