Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Getter/Setter还是直接引用?_Javascript_Ember.js - Fatal编程技术网

Javascript Getter/Setter还是直接引用?

Javascript Getter/Setter还是直接引用?,javascript,ember.js,Javascript,Ember.js,学习Ember.js并通过Ruby和Java合理理解getter和setter访问器 在Ember/Javascript中,我似乎严重缺乏理解。例如,在我的控制器/模型中,我不知道是使用object.setproperty、value还是直接引用它们object.property='value' 例如,在我前面的问题中,工作答案的一部分是使用object.name而不是object.get'name'。它起作用了,但我没有基本的理解 希望您能澄清一下。这是Javascript的工作方式,也是它的

学习Ember.js并通过Ruby和Java合理理解getter和setter访问器

在Ember/Javascript中,我似乎严重缺乏理解。例如,在我的控制器/模型中,我不知道是使用object.setproperty、value还是直接引用它们object.property='value'

例如,在我前面的问题中,工作答案的一部分是使用object.name而不是object.get'name'。它起作用了,但我没有基本的理解


希望您能澄清一下。

这是Javascript的工作方式,也是它的缺点之一。它没有公共/私人的礼节和方法。因此,我们应该依赖代码中的良好注释

我不是Ember方面的专家,但当我在JS中遇到类似问题时,我通常会查看库的源代码,看看它是如何构造的,然后做出决定。这就是为什么js库通常附带min和dev版本的原因


但是,如果对象具有访问其属性的特殊方法,那么它们的存在是有原因的,因此请使用它们,而不是直接访问属性。如上所述,在Js中,不能将属性设置为私有或受保护。

规则是:当您在.Js文件中时,应始终使用.get/.set。当你在你的模板.hbs或其他你不应该你不能这样做

如果您通过myObj.myProp访问属性,它将适用于常规属性,而计算属性则不适用。如果通过myObj.myProp设置属性,仍然可以获取该值,但是绑定和观察者不会收到该值已更改且未正确更新的通知

这是Ember团队的一项设计决策,它允许有效的绑定/观察者,而不是像Angular目前所做的那样对所有绑定/观察到的属性进行脏检查

我制作了一个小jsbin来展示这个。最初绑定三个值,然后按钮更改一个值并将其记录到控制台中,因此确保控制台处于打开状态,绑定不会更新,但可以检索该值。然后,它尝试通过myObj.myProp获取一个计算属性,该属性返回undefined,然后以常规方式返回

另外,作为旁注。如果您希望子对象上的属性与您所拥有的内容相关联,则可以通过myObj.get'myProp.myOtherProp'访问它,而不是执行myObj.get'myProp'。get'myOtherProp'。它使您不用担心myProp会返回null或未定义