![](/img/trans.png)
[英]How can I create new objects with user defined properties every time a function is called in JavaScript?
[英]In JavaScript when I create my functions and variables inside objects how can I avoid using “this” every time?
我正在使用包含功能和成員的簡單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
為什么呢?
您指的是對象屬性,因此必須告訴JavaScript引擎您要從中讀取對象。 有沒有隱含this
好像有在Java或C#。 您正在使用的參考是this
,因此您必須使用this.
在代碼中。
可以使用with
構造將對象的所有屬性轉儲到作用域中,但是強烈不建議這樣做-實際上,當TC-39(指導JavaScript的委員會)在2009年發布ES5時,它們是如此強烈。添加了新的“嚴格模式”來執行各種操作,其中之一就是完全禁止with
嚴格模式。
使用顯式對象引用就是在JavaScript中完成的方式。
JavaScript中還有其他不使用this
樣式的編程樣式,其中某些樣式可以很大程度上避免通過操縱閉包來使用對象引用,但是查看您的代碼,它們將與所使用的框架/庫不兼容。 其他人則避免了this
但是仍然有一個明確的對象引用(例如foo.
),因此這實際上並沒有幫助。
當然,如果只希望它更短,則可以將其別名為變量:
var t = this;
t._super();
t.init(/*...*/);
(假設您正在使用的lib並不使用函數反編譯來明確地尋找到this
,有些人曾經使用過,但是希望這些天現代沒有做...)
...但是坦率地說,我建議您this
感到滿意。
這是一個構造函數,表示您正在使用此函數創建對象。 對象是this
。 你需要指定你正在做所有這些事情來this
。 這是故意的,不是錯誤,根本沒有理由要更改它。 如果需要在另一個函數或setTimeout
使用它,則可以聲明一個新變量,並通過執行以下操作使其引用this
變量: var that = this;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.