Javascript JS如何避免使用;这";

Javascript JS如何避免使用;这";,javascript,this,Javascript,This,我最近看了一个youtube教程,这个家伙在这个系列中做了一些有趣的事情(Raining Chain的node.js游戏教程)。他的构造函数如下所示: const MakeStuff = function(param1, param2) { const self = {}; self._param1 = param1; self._param2 = param2; // and so on... return self; } const someStuff = MakeSt

我最近看了一个youtube教程,这个家伙在这个系列中做了一些有趣的事情(Raining Chain的node.js游戏教程)。他的构造函数如下所示:

const MakeStuff = function(param1, param2) {
  const self = {};
  self._param1 = param1;
  self._param2 = param2;
  // and so on...
  return self;
}

const someStuff = MakeStuff(param1, param2);
然后我查了一下谷歌的“自我”是什么意思,它发现它和“这个”很相似。。。现在我真的很困惑。起初我以为他只是把它命名为“self”来模仿“this”,但要避免使用它

另外,JSLint真的很讨厌“this”,我也不喜欢让JSLint哑口无言,禁用或编辑选项(ocd),所以我试图弄清楚如何使用类,避免在类构造函数中使用“this”

我想我应该在babeljs中复制/粘贴我的类函数,看看类语法在引擎盖下到底做了什么,但我更加困惑了

我的游戏中有大约2k行代码,1.5k只是包含getter、setter和静态方法的类

上面的代码实际上是做什么的?自我是什么意思?我可以使用JS类并避免在构造函数中使用“this”吗?为什么JSLint甚至讨厌“这个”?我是否应该使用上面的示例重新编写代码,并使用prototype绑定getter、setter和静态方法


谢谢

到目前为止,其他语言使用self代替js'
this
;它是对实例上下文的引用。在这个用例中,他不是在写构造函数,而是在写工厂<代码>自我在这里只不过是一种命名约定。如果他写道:

const MakeStuff = function(param1, param2) {
  const obj = {};
  obj._param1 = param1;
  obj._param2 = param2;
  // and so on...
  return obj;
}

const someStuff = MakeStuff(param1, param2);

另外,+1以感谢brk提及
self
,除非重新设置,否则引用
窗口
到目前为止,其他语言使用self代替js'
;它是对实例上下文的引用。在这个用例中,他不是在写构造函数,而是在写工厂<代码>自我在这里只不过是一种命名约定。如果他写道:

const MakeStuff = function(param1, param2) {
  const obj = {};
  obj._param1 = param1;
  obj._param2 = param2;
  // and so on...
  return obj;
}

const someStuff = MakeStuff(param1, param2);

另外,+1是为了提醒我,
self
,除非重新设置,否则对我
MakeStuff
而言,引用
window

只是一个函数,而不是构造函数。而且在您提供的代码中,
self
这个
没有任何关系。在这里,它只是函数中的一个变量,被分配了一些键和元素
param1
param2

const MakeStuff = function(param1, param2) {
  const returnedElement = {};
  returnedElement ._param1 = param1;
  returnedElement ._param2 = param2;
  // and so on...
  return returnedElement ;
}

const someStuff = MakeStuff(param1, param2);
有时,您需要使用
self
(有些使用
that
)来访问
,但在另一个范围内

您可以在上找到一个很好的解释:

var self=this

[这是]保留对当前对象的引用,因此稍后当您调用[
self
]时,您是在该对象上调用该方法,而不是在任何其他对象上调用该方法


对我来说,
MakeStuff
只是一个函数,而不是构造函数。而且在您提供的代码中,
self
这个
没有任何关系。在这里,它只是函数中的一个变量,被分配了一些键和元素
param1
param2

const MakeStuff = function(param1, param2) {
  const returnedElement = {};
  returnedElement ._param1 = param1;
  returnedElement ._param2 = param2;
  // and so on...
  return returnedElement ;
}

const someStuff = MakeStuff(param1, param2);
有时,您需要使用
self
(有些使用
that
)来访问
,但在另一个范围内

您可以在上找到一个很好的解释:

var self=this

[这是]保留对当前对象的引用,因此稍后当您调用[
self
]时,您是在该对象上调用该方法,而不是在任何其他对象上调用该方法


在你的例子中,self只是一个常量的名称

在您的例子中,self只是一个常量的名称

这是JavaScript的一个重要方面,但却是最难理解的方面之一。理解在JS中进行任何面向对象的编程是绝对必要的,这对于游戏设计至关重要

我建议您了解范围,以及
如何在不同范围内应用此

基本上是在运行函数时,例如

函数窗口_范围(){

这是foobar

}

是浏览器中的
窗口
,或者定义为全局范围的任何变量。意思是
this.foobar
等于
window.foobar

调用函数时执行
new
,例如
var newfoo=newfoo()

函数foo(){

这是foobar

}


这个
突然变成了对
newfoo
的引用。这意味着
this.foobar
等于
newfoo.foobar
这允许您创建不需要引用实际局部变量的对象
newfoo
这是JavaScript的一个重要方面,但却是最难理解的方面之一。理解在JS中进行任何面向对象的编程是绝对必要的,这对于游戏设计至关重要

我建议您了解范围,以及
如何在不同范围内应用此

基本上是在运行函数时,例如

函数窗口_范围(){

这是foobar

}

是浏览器中的
窗口
,或者定义为全局范围的任何变量。意思是
this.foobar
等于
window.foobar

调用函数时执行
new
,例如
var newfoo=newfoo()

函数foo(){

这是foobar

}

这个
突然变成了对
newfoo
的引用。这意味着
this.foobar
等于
newfoo.foobar
这允许您创建不需要引用实际局部变量的对象
newfoo

上面的代码实际上是做什么的

const MakeStuff=function(param1,param2){
常量self={};
有限公司