Javascript 在子函数中引用父函数(this)是错误的做法吗?
上下文 在一个典型的JavaScript OO类中,当您有Javascript 在子函数中引用父函数(this)是错误的做法吗?,javascript,Javascript,上下文 在一个典型的JavaScript OO类中,当您有 function parent(){ this.a = "parent"; this.child = function(){ console.log(this.a); //undefined } } 现在我知道您可以使用以下方法引用父级此: var that = this; 问题 这被认为是好的、坏的还是中立的做法?我想也许可以从性能或者其他方法的角度来指导我 注意:我已经阅读了一
function parent(){
this.a = "parent";
this.child = function(){
console.log(this.a); //undefined
}
}
现在我知道您可以使用以下方法引用父级此:
var that = this;
问题
这被认为是好的、坏的还是中立的做法?我想也许可以从性能或者其他方法的角度来指导我
注意:我已经阅读了一些其他stackoverflow问题/答案,但他们更多地要求如何使用它,而不是使用它有什么问题(如果有的话)
这被认为是好的、坏的还是中立的做法
这是完全正常的做法。这是JavaScript工作原理的基础。只要它适合这种情况,就没有什么问题
主观的: 使用
那
来处理这件事是我的一大烦恼。把它叫做那是毫无意义的。但是,这是常见的做法。:-)我经常使用self
,这很常见(不像那样常见)。正如评论中所指出的,它会让您稍微遇到调试的麻烦,因为self
是浏览器上的一个全局设置(类似于window
)。我经常做的另一件事是选择一个与事物实际是什么相关的名词,这增加了语义价值。例如,如果this
引用了Whatsit
实例,我可能会使用Whatsit
或theWhatsit
。另一个建议是\u这个(带下划线)。一个像样的IDE会使它的颜色与这个
不同,从而减少误读的几率,但这是值得关注的
但是这纯粹是一种风格的选择,而这是很多人的选择。值得指出的是,OP对“家长”和“孩子”的用法并不是标准用法…@Alnitak:的确如此。也许最好是作为对问题的评论,而不是答案的一部分。@katspaugh:理论上是的。实际上,我多年来使用self
从未遇到过问题。如果您有一个非
建议,我很乐意为您提供一个替代方案。:-)我试了一会儿me
,但不喜欢。我想用下划线var\u this=this
来抽象this
可能很好。我想这是显而易见的。@Barney在上面我反对OP使用“父”术语,因为这更常用于树结构(例如DOM),OP的使用只是词法闭包,这里所指的通常称为“外部”作用域。在您的示例中,我相信这指的是全局对象。@Aiden:FWIW,“外部”和“内部”是这方面的常用术语(例如,本例中的“外部作用域”是父函数的作用域,“内部作用域”是子函数的作用域)。阿尔尼塔克在对我的回答的评论中提到了这一点,但我认为它应该得到更突出的位置。