我正在使用包含函数和成员的简单JavaScript对象
问题是,每次我使用其中一个成员或函数时,我都要添加this
编写this
会增加更多工作,那么如何在每个成员变量或成员函数之前避免使用它?
例如:
var MyClass = cc.LayerColor.extend({
sprite:null,
stopGameLoop:false,
labelScore:null,
winSize:0,
visibleOrigin:0,
blocksList : [] ,
circle:null,
gameOverScreen:null,
circleblockY:0,
circleblockX:0,
blocksNum:0,
currentState:0,
zCount:0,
currentZorder:0,
iScore:0,
ctor:function () {
//////////////////////////////
// 1. super init first
this._super();
this.init( cc.color(255,255,255, 255) );
this.winSize = cc.winSize;
this.visibleOrigin = cc.director.getVisibleOrigin();
this.setGameOverScreen(this.blocksNum);
this.setLevel(this.circleblockY,this,circleblockX);
return true;
},
setLevel:function (a,b,c) {
},
setGameOverScreen:function (foo) {
},
});
始终使用,this
为什么?
答案 0 :(得分:2)
您指的是对象属性,因此您必须告诉JavaScript引擎您要从哪个对象读取它们; Java或C#中没有隐式this
。您使用的引用是this
,因此您必须在代码中使用this.
。
可能使用with
构造将对象的所有属性转储到作用域中,但这样做强烈劝阻 - 如此强烈,事实上,当TC-39(操纵JavaScript的委员会)在2009年发布ES5时,他们添加了一个新的“严格模式”来做各种事情,其中一个就是完全禁止with
严格模式
使用显式对象引用就是在JavaScript中完成它的方式。
JavaScript中还有其他一些编程风格不使用this
,其中一些可以在很大程度上避免通过操纵闭包使用对象引用,但是查看代码时它们与框架不兼容你正在使用/库。其他人避免使用this
,但仍然有明确的对象引用(例如foo.
),因此这不会有任何帮助。
当然,如果您只想缩短它,可以将其别名为变量:
var t = this;
t._super();
t.init(/*...*/);
(假设您正在使用的lib不使用函数反编译来明确地查看this
,有些人曾经这样做,但希望现在没有任何现代的东西......)
...但坦率地说,我建议您对this
感到满意。
答案 1 :(得分:0)
这是一个构造函数,意味着您正在使用此函数来创建对象。对象是this
。您需要指定您正在对this
执行所有这些操作。这是一个故意的事情,而不是一个错误,没有任何理由可以改变它。如果您需要在其他函数或setTimeout
中使用它,您可以声明一个新变量,并通过执行以下操作使其引用this
:var that = this;