javascript - 在原型(prototype)对象分配中将实例引用为 'this'

标签 javascript

下面的示例包含一些格式化函数以及一个在字段和格式化函数之间映射的对象。

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 "&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
    }
}

但是你可以使用一个技巧:使用 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
    }
}})

关于javascript - 在原型(prototype)对象分配中将实例引用为 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345284/

相关文章:

javascript - 当一个类被添加到另一个类中时,在容器类上添加 CSS,反之亦然

javascript - 使用 javascript 从 Firebase 添加地点到热图

javascript - JSplumb - 获取到特定端点的连接

javascript - 我们可以将 JavaScript 变量传递给 Python 文件吗?

javascript - 限制 vue/vuex react 性

javascript - PHP - 总是需要在表单验证中填写空白

javascript - 如何找到非间接/嵌套的父级的子级

javascript - 尝试从我的 mongoDB 访问数据并推送到 HTML 中的 <table>

javascript - jquery 函数不工作不会显示警报

javascript - 根据滚动淡入淡出