gpt4 book ai didi

ember.js - 如何在 Ember.Object 中创建私有(private)方法/属性?

转载 作者:行者123 更新时间:2023-12-04 00:54:57 25 4
gpt4 key购买 nike

我们可以像这样创建 Em.Object:

var foo = Em.Object.create({
somevar : '123'
});

然后使用它:

foo.get('somevar');

但是如何在 Em.Object 中创建可以从对象访问但不在我们身边的私有(private)属性或方法?

最佳答案

确实有办法在 Ember 对象中拥有私有(private)变量,如下:

MyObject = Ember.Object.extend({
init: function() {
// private variable
var a = 1;

// methods to get, set, or otherwise accesss the private variables
this.getA = function() {return a;};
this.setA = function(val) {a = val;}

// don't forget this!
this._super(...arguments);
}
});

现在试试
o1 = MyObject.create()
o2 = MyObject.create()
o1.setA(42);
o2.getA(); //1

换句话说,您必须在 init 中声明私有(private)变量,以及任何想要使用它们的 getter、setter 或其他例程。钩。当然,这意味着这些 getter/setter 将出现在类的每个实例上,而不是在其原型(prototype)中。这有点低效,但对于 JavaScript 中类的私有(private)变量的任何方法都是如此。

可以想象,Ember 可以引入一个新的 private: {}散列对象,但是 Ember 需要大量机器来处理跨类层次结构查找和控制对私有(private)变量的访问。这相当于重新设计或扩展语言本身,这不是 Ember 使命的一部分。

同时,如果私有(private)实例变量的数量有限并且需要访问它们的例程数量很少,则上述方法也可以正常工作。所以说这是不可能的公认答案是错误的。

关于ember.js - 如何在 Ember.Object 中创建私有(private)方法/属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com