你如何在像Ember.js这样的javascript中复制像function(){...} .property()这样的东西?

chi*_*ro2 5 javascript ember.js

Ember使用类似的东西:

val: function(){ 
    ...
}.property()
Run Code Online (Sandbox Code Playgroud)

和类似的东西:

func: function(){
}.observes('someValue')
Run Code Online (Sandbox Code Playgroud)

我认为你可以在一个函数的末尾添加一个属性的事实非常简洁,并希望复制它.但是,我无法找到源中的任何一个实现,并且我想知道是否有人知道?

另外,更重要的是,究竟发生了什么?

Ber*_*rgi 5

它是Functions方法之一,就像callbind.

您可以通过扩展本机Function.prototype对象来添加其他方法.不过,这是否是一种好的做法是可以讨论的 ; 还看看这些 文章.

  • 如果您想了解Ember如何实现这一点,请参阅https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/ext/function.js.另请注意,如果您认为这不是一个好主意,Ember可以通过将`Ember.EXTEND_PROTOTYPES`设置为false来配置此行为. (2认同)