Javascript通过函数返回字符串的动态对象属性

时间:2014-01-31 20:01:23

标签: javascript backbone.js underscore.js marionette

我正在构建一个Backbone Marionette应用程序。在Marionette你可以做类似的事情:

Marionette.Application.extend({
    regions: {
        mainRegion: function(){return someCondition?"#A":"#B"},
        otherRegion: "#something"
    }
})

我正在尝试使用自定义对象在我的应用程序中实现它。实现这一目标的最佳方法是什么? 目前,我正在检查每个值:

if(typeof obj == "function") {
    this.data.obj = obj();
}
else {
    this.data.obj = obj;
}

或相应的?:表达式。 有更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

Underscore有一个result方法,可以完全按照您的意愿行事(参见http://underscorejs.org/#result

您可以在此处找到实施:http://underscorejs.org/docs/underscore.html#section-128

答案 1 :(得分:0)

有一个潜在的解决方案(提示尖叫)将value()[不要与valueOf()]混淆到你感兴趣的每个原型。

Function.prototype.value = function(){return this(); }; //可能应该是.call()所以你可以在必要时做参数。

String.prototype.value = function(){return this; };

然后你可以对所有的电话使用this.data.obj = obj.value()。

如果您对向原型添加功能感到不安,这不是您想要使用的解决方案。否则你可以编写一个包装函数,它将obj作为参数,并根据类型返回正确的东西。

dandavis提出的鸭子打字理念也很好恕我直言。