“get”方法也是如此。与get(this, 'agentName')
和this.get('agentName')
一样,返回相同的值。
在官方ember doc for get method中,它表明我们应该传递2个值来获取。那么this.get('agentName')
如何准确工作?
答案 0 :(得分:3)
QMainWindow::setMenuBar (0)
是this.get(...)
的快捷方式。但是它仅在ember对象上可用,因此只有Ember.get(this,...)
在普通的js对象中起作用。
答案 1 :(得分:2)
Ember中的getter和setter已升级为处理unknown property
,computed property
和observers
。没有多少人会使用setUnknownProperty()
钩子或unknownProperty()
钩子来获取和设置,但在大多数人的代码中都有计算属性和观察者。有关computed properties和observers的更多信息。
因此,set()
和this.set()
之间的基本区别与您的函数的上下文有关。当你只调用set()时,它必须在该范围内定义或从某个地方导入以完成任务。但是,使用this.set(),这里的范围是这个。根据您调用函数的位置,范围会发生变化。例如,如果您使用的是组件,则this
会引用component
类本身。类似于控制器,路线和其他余烬物体的情况。如果你有自己的对象并且它没有扩展任何ember类,那么this
仍然可以使用它在任何其他JavaScript代码中的作用。因此,它将回退到JavaScript中的默认getter和setter。
正如您现在可能已经意识到的那样,当您调用get(this, 'foo')
时,您正在调用JavaScript的getter函数并将当前上下文传递给要搜索的属性。当你说this.get('foo')
时,你从get()
课程中调用Ember.Object
,这可以处理我上面提到的事情。而@Lux提到this.get('foo')被简化为调用Ember.get(this,'foo')。
希望这会有所帮助。我鼓励您阅读Ember guides和API docs。 Curent ember-cli和ember-data版本是@ 2.12.0