JS如何避免使用"这个"

时间:2018-05-23 16:55:57

标签: 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 = MakeStuff(param1, param2);

然后我检查了谷歌的内容" self"这意味着它发现了类似于"这个" ...现在让我很困惑。起初我以为他只是命名它自己"模仿"这",但避免使用它。

另外,JSLint真的很讨厌"这个",我讨厌愚弄JSLint并禁用或编辑选项(ocd),所以我试图弄清楚我将如何使用类,并避免使用"这个"内部类构造函数。

我想我会在babeljs中复制/粘贴我的类函数,看看类的语法实际上是做什么的,但我更加困惑。

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

上面的代码实际上做了什么?自我意味着什么?我可以使用JS类并避免使用"这个"在构造函数?为什么JSLint甚至讨厌"这个"?我应该使用上面的示例重写我的代码并使用原型绑定getter,setter和静态方法吗?

谢谢!

5 个答案:

答案 0 :(得分:1)

截至目前,自我被其他语言用来代替js'this;它是对实例上下文的引用。在这个用例中,他不是写一个构造函数,而是一个工厂。 self只不过是一个命名约定。如果他写下来会没有区别:

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

const someStuff = MakeStuff(param1, param2);

另外,提及self的+1给brk,除非重新设置,否则引用window

答案 1 :(得分:1)

  

上面的代码实际上做了什么?

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

const someStuff = MakeStuff(1, 2);
console.log(someStuff)

上面的代码只是调用一个接受两个参数并返回一个对象的函数。这个函数里面的self只是一个变量

  

自我意味着什么?

除非专门设置,self引用window对象。但上述函数const self不是window.self

console.log(self)

答案 2 :(得分:0)

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

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)来访问this,但在另一个范围内。

您可以在another SO thread找到一个很好的解释:

  

var self = this;

     

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

答案 3 :(得分:0)

在你的情况下,self只是常量的名称。

答案 4 :(得分:0)

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

我建议学习范围以及this如何应用于不同范围内的不同事物。

基本上当你运行诸如

之类的功能时
  

function window_scope(){

     

this.foobar;

     

}

this是浏览器中的window或任何变量被定义为全局范围。含义this.foobar等于window.foobar

在调用new

等功能时执行var newfoo = new foo()
  

function foo(){

     

this.foobar;

     

}

this突然成为newfoo的引用。含义this.foobar等于newfoo.foobar这使您可以创建不需要引用实际局部变量的对象newfoo