我发现自己需要:
var self = this;
我的javascript“类”中有很多内容。尽管通常这样做,但感觉还是有些错误。我希望在这个问题中找到解决这个问题的更好方法,或者说服我这是完全可以的。
这是保持正确绑定的标准方法吗?我是否应该在所有地方都标准化使用“自我”,除非我明确需要“这个”。
编辑:我确切地知道为什么我需要这个,我只是想知道它是否被认为是邪恶的,为什么。我知道还有一个“应用”内置的javascript函数可以在调用方法时显式定义范围。是不是更好?
就像其他人所说的那样:“某种程度上,这个“额外变量”是解决这一事实的唯一方法,因为它this
是一个特殊的表达式,因此不是变量,它不受执行上下文/闭包的约束。
但是,我认为您要问的(或我真正想回答的)是:
是否应该
var self = this
在每个方法/构造函数的顶部放置一个?
当我尝试过一次并且有相同的问题时,我不再使用这种方法。现在,当需要在闭包中访问时,我保留该构造。对我来说,它有点“嘿,这就是我真正想要的!” 我的代码的语义:
this -> this
和 self -> this (but really that) in a closure
...虽然通常这样做,但感觉还是有些错误。我希望在这个问题中找到解决这个问题的更好方法,或者说服我这是完全可以的。
做适合您的事情。不要害怕尝试一种方法,以后再切换回去(但请尝试在每个项目中保持一致:-)
这是保持正确绑定的标准方法吗?我是否应该在所有地方都标准化使用“自我”,除非我明确需要“这个”。
“自我”是最常用的名称。如上所述,我更喜欢使用相反的方法,this
除非需要使用闭包绑定。
..如果认为它有点邪恶,为什么。
邪恶是一个愚蠢的主观术语(尽管有时很有趣)。我从未说过这是邪恶的,这就是为什么我不遵循这种方法。有人告诉我,我不使用分号是“邪恶的”。我告诉他们,他们实际上应该提出好的论据和/或更好地学习JavaScript :-)
我知道还有一个“应用”内置的javascript函数可以在调用方法时显式定义范围。是不是更好?
问题apply/call
在于您必须在函数调用时使用它们。如果其他人调用了您的方法之一,那将无济于事,因为this
可能已经关闭了。对于执行诸如jQuery样式的回调之类的操作最有用,其中this
的元素是回调的元素/项目,等等。
我喜欢避免成员上的“需要自我”,因此通常将所有成员函数提升为接收者(this
)只是“流经”(通常是“预期”)的属性。
我的代码中的“私有”方法以“ _”开头,如果用户调用它们,它们就在它们上面。当使用原型方法创建对象时,这也更好(实际上是必需的)。但是,道格拉斯·克罗克福德(Douglas Crockford)不赞成我的这种“私有”方法,在某些情况下,查找链可能会因注入意外的接收者而使您受挫:
在构造函数中使用“自我”绑定还可以锁定方法的查找链的上限(它不再是向上的多态!),该方法可能正确也可能不正确。我认为通常是不正确的。
快乐的编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句