在Ember中set(this,'agentName','John')和this.set('agentName','John')有什么区别?

时间:2017-04-07 18:49:57

标签: ember.js

“get”方法也是如此。与get(this, 'agentName')this.get('agentName')一样,返回相同的值。

在官方ember doc for get method中,它表明我们应该传递2个值来获取。那么this.get('agentName')如何准确工作?

2 个答案:

答案 0 :(得分:3)

QMainWindow::setMenuBar (0)this.get(...)的快捷方式。但是它仅在ember对象上可用,因此只有Ember.get(this,...)在普通的js对象中起作用。

查看this.get(...) implementation

答案 1 :(得分:2)

Ember中的getter和setter已升级为处理unknown propertycomputed propertyobservers。没有多少人会使用setUnknownProperty()钩子或unknownProperty()钩子来获取和设置,但在大多数人的代码中都有计算属性和观察者。有关computed propertiesobservers的更多信息。

因此,set()this.set()之间的基本区别与您的函数的上下文有关。当你只调用set()时,它必须在该范围内定义或从某个地方导入以完成任务。但是,使用this.set(),这里的范围是这个。根据您调用函数的位置,范围会发生变化。例如,如果您使用的是组件,则this会引用component类本身。类似于控制器,路线和其他余烬物体的情况。如果你有自己的对象并且它没有扩展任何ember类,那么this仍然可以使用它在任何其他JavaScript代码中的作用。因此,它将回退到JavaScript中的默认gettersetter

正如您现在可能已经意识到的那样,当您调用get(this, 'foo')时,您正在调用JavaScript的getter函数并将当前上下文传递给要搜索的属性。当你说this.get('foo')时,你从get()课程中调用Ember.Object,这可以处理我上面提到的事情。而@Lux提到this.get('foo')被简化为调用Ember.get(this,'foo')。

希望这会有所帮助。我鼓励您阅读Ember guidesAPI docs。 Curent ember-cli和ember-data版本是@ 2.12.0