2016-09-26 5 views
-1

関数とメンバを保持する単純なJavaScriptオブジェクトを使用しています
問題は、メンバまたは関数のいずれかを使用するたびにthisを追加する必要があることです。
thisを書くと、すべてのメンバー変数またはメンバー関数の前にそれを使用しないでください。例えば
JavaScriptでオブジェクト内に関数と変数を作成すると、いつどのように "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なぜ?

+3

現代のJSと互換性のある一般的なソリューションはありません。暗黙のうちにいくつかの言語に比べてJSの自由は、財産の所有者を参照するときに明白にする必要があります。 –

+0

メソッドの代わりに関数を使うならば、 'this.'を削除することができます(クラスにそれらを付けないでください)。 – Thomas

答えて

2

オブジェクトプロパティを参照しているので、JavaScriptエンジンにどのオブジェクトを読み込ませるかを伝える必要があります。 JavaやC#のような暗黙的なthisはありません。使用している参照はthisなので、コード内でthis.を使用する必要があります。

それはwith構文を使用して、スコープにオブジェクトのすべてのプロパティをダンプする可能だが、そうするときTC-39(委員会ということが強く、実際には、そう強く   —をがっかりです2009年にES5をリリースした彼らは、さまざまなことを行うための新しい「厳密モード」を追加しました。その1つは、完全にstrictモードではwithを禁止することです。

明示的なオブジェクト参照を使用することは、JavaScriptでどのように行われているかです。

JavaScriptには、thisを使用しない他のスタイルのプログラミングがありますが、そのうちのいくつかはクロージャを操作してオブジェクト参照を使用することはほとんどありませんが、フレームワーク/ライブラリ使用しています。他のものはthisを避けても明示的なオブジェクト参照(例:foo.)を持っているので、実際には役に立ちません。もちろん

、あなたはそれを短くしたい場合、あなたはそれを変数に別名設定できる:

var t = this; 
t._super(); 
t.init(/*...*/); 

(あなたが使用しているのlibがために明示探すために、関数逆コンパイルを使用していないと仮定いくつかのために使用this、しかし、現代の何もしませんうまくいけば、これらの日...)

...しかし、率直に言って、私はちょうどthisに慣れることをお勧めします。

+0

同じ... – user63898

+0

@ user63898:申し訳ありませんが、「これと同じtこれ」が意味するものは何もわかりません。 –

+0

これはes6で可能です:this [a、b] = [function(){}、 "var"]; ? –

0

これはコンストラクタです。つまり、この関数を使用してオブジェクトを作成しています。オブジェクトはthisです。これらすべてのことをthisに指定する必要があります。その意図的なものであり、バグではなく、それを変更する理由も全くありません。別の関数、またはsetTimeoutで使用する必要がある場合は、新しい変数を宣言して、thisを参照することができます。var that = this;

関連する問題