【发布时间】:2012-02-14 01:08:29
【问题描述】:
模型中是否可以有私有属性?就像(构造函数)函数中本地声明的变量一样,不附加到this,而是在本地声明并且仅由(构造函数)函数中定义的任何内容可见。
没有 BB 视图的示例:
function MyView(aModel){
var $internalInput = $('<input>');
this.render: function($where){
$internalInput.val(aModel.get('SomeProperty'));
$where.append($('<div class="inputWraper">').append($internalInput));
};
this.toggleReadonly: function() {
toggle $internalInputs readonly attribute
}
...
+ Code to bind input.val to some aModel property(ies) and setup events
...
}
请注意,internalInput 无法被外界访问,aModel 也无法访问(至少通过 MyView)。
所以如果我想用Backbone.View来实现上面的MyView,我该怎么做并保持$internalInput'private'?
【问题讨论】:
-
请注意,“私有”的唯一作用就是让您的代码变慢。
-
你能详细说明一下吗?我只是想要它用于信息隐藏目的,以便我将来可以更改它,而不用担心有人可能会因为直接使用它而依赖它。但是,如果这意味着减慢代码速度,那么这就是一个问题。我在哪里可以找到有关您的索赔的更多信息?
-
Closures have massive overhead, Private state is expensive but can be done better。我个人的建议是使用
_foo来处理可能发生变化的internal 属性。此外,如果有人依赖 internal 属性,那么当您的 API 更改时,这是 他们的 问题,而不是您的问题
标签: javascript backbone.js private