我最近看了一个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和静态方法吗?
谢谢!
答案 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
没有任何关系。这里只是函数内部的一个变量,它被分配了一些键和元素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
)来访问this
,但在另一个范围内。
您可以在another SO thread找到一个很好的解释:
var self = this;
[这是]保留对当前对象的引用,以便稍后当您调用[
self
]时,您在该对象上调用该方法 ,而不是任何其他。
答案 3 :(得分:0)
在你的情况下,self只是常量的名称。
答案 4 :(得分:0)
this
是JavaScript的重要方面之一,但却是最难理解的方面之一。理解在JS中进行任何对于游戏设计必不可少的面向对象编程是绝对必要的。
我建议学习范围以及this
如何应用于不同范围内的不同事物。
http://web.archive.org/web/20110725013125/http://www.digital-web.com/articles/scope_in_javascript/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
https://javascriptplayground.com/javascript-variable-scope-this/
http://ryanmorr.com/understanding-scope-and-context-in-javascript/
基本上当你运行诸如
之类的功能时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