2

私はいくつかのライブラリ javascript ソース コードを調べてきましたが、まったく理解できないステートメントを見つけました。このライブラリはdojoに基づいており、「クラス継承」の実装を使用しています。これは、主題であるコードの簡略化されたバージョンです。

dojo.declare("myCustomClass", {
    constructor:function(){
        // what does this statement mean?
        isContentShowing : false;

        //here some code that uses isContentShowing in callbacks
        dojo.connect(this, "fakeEvent", this, function(){
            if(this.isContentShowing){
            //do some stuff
            }
            //do more stuff
        });
    }
});

では、問題は、isContentShowing: false;内側の関数本体が何を意味するのかということです。

4

3 に答える 3

7

変数ではありません。ラベルです:

break または continue ステートメントを使用して参照できる識別子を持つステートメントを提供します。

この場合、ラベルとして使用されず、代入も行われず、評価結果は破棄されます。false

以下の条件を考えると、より理にかなっている= 思います。おそらく、元の作成者は、後で評価したためにこのバグに遭遇/認識したことはありませんでした(したがって、まだ誤っています)。thisthis.isContentShowing = falsethis.isContentShowingundefinedfalse

または、Chris がコメントで示唆しているように、その意図は次のようなものだった可能性があります。

dojo.declare("myCustomClass", {
  isContentShowing : false, // but , and not ;
  constructor:...
});
于 2012-06-04T07:31:53.490 に答える
-1

constructor: したがって、間違ったステートメントのように見えます(@pst で説明されているように、代わりにラベルとして解釈されます) dojo.declare。未定義の値は false であるため、最終的には動作はほとんど同じです。プロトタイプで誤ったプロパティを宣言することは、誰かが実際にプロパティを反復して存在を確認していない限り、価値が限られてdojo.parseいます。

于 2012-06-04T16:14:38.057 に答える
-1

これは Javascript ではオブジェクト リテラルと呼ばれます。キーと値のペアが含まれています。例:

var car = {
    color: 'blue',
    price: 10000
}

そのため、呼び出すcar['color'] or car.colorと返されblueます。私の例では、色がキーで、値は「青」です。これはキーと値のペアと呼ばれます。

とにかく、あなたの例でthis.isContentShowingはデフォルトで false を返します。

于 2012-06-04T07:37:33.960 に答える