Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在子函数中引用父函数(this)是错误的做法吗?_Javascript - Fatal编程技术网

Javascript 在子函数中引用父函数(this)是错误的做法吗?

Javascript 在子函数中引用父函数(this)是错误的做法吗?,javascript,Javascript,上下文 在一个典型的JavaScript OO类中,当您有 function parent(){ this.a = "parent"; this.child = function(){ console.log(this.a); //undefined } } 现在我知道您可以使用以下方法引用父级此: var that = this; 问题 这被认为是好的、坏的还是中立的做法?我想也许可以从性能或者其他方法的角度来指导我 注意:我已经阅读了一

上下文

在一个典型的JavaScript OO类中,当您有

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,“外部”和“内部”是这方面的常用术语(例如,本例中的“外部作用域”是父函数的作用域,“内部作用域”是子函数的作用域)。阿尔尼塔克在对我的回答的评论中提到了这一点,但我认为它应该得到更突出的位置。