2016-05-26 6 views
-1

私はpandaというjavascriptゲームエンジンを使用していますが、コンソール(Uncaught Class BGが既に作成されています)でエラーが発生しています。そして、私はエンジンのソースコードを調べると、エラーを投げているコードが見つかりました(下記)。私の質問は、2番目のif文では(この[名前])の意味は何ですか?私は正確に何を言っているのか理解していない。どんな助けもありがとう。ありがとうございました。Javascriptの "if(this [x])"の意味は何ですか?

createClass: function(name, extend, content) { 
    if (typeof name === 'object') return this.Class.extend(name); 

    if (this[name]) throw 'Class ' + name + ' already created'; 

    if (typeof extend === 'object') { 
     content = extend; 
     extend = 'Class'; 
    } 
+1

'this'オブジェクトは* truthyある(変数が保持する何でも)' NAME'の名前の属性を有することが確認。 'this ['foo']'は 'this.foo'と同じですが、' 'foo''だけが変数になります。 – deceze

答えて

1

オブジェクトプロパティを参照するJavaScriptには、2種類の表記法があります。

var Employee = { "firstname" : "John", "lastname" : "Smith" } 

1ドット表記

Employee.firstname; // John 
Employee.lastname; // Smith 

2.ブラケット表記

var fname = "firstname"; 
var lname = "lastname"; 

Employee[fname]; // John 
Employee[lname]; // Smith 

ので、包みオブジェクトのプロパティには、我々は、ユーザブラケット表記できる変数である場合。

あなたのケースでは、this[name]はこのオブジェクトのプロパティを参照しています。

+0

ここでは、 "*添え字/配列表記*"と呼ばれるものは、言語仕様(および他のどこか他のもの)で "括弧表記"と呼ばれています([* ECMA-262§12.3.2*](http:// www。 ecma-international.org/ecma-262/6.0/#sec-property-accessors)。 – RobG

+0

@RobG、お返事ありがとうございます。私は答えを更新します。 –

0

これはコードの断片からはっきりとは分かりませんが、投稿しましたが、これはクラスコンテナの一種かもしれません。指定された名前を持つプロパティの存在を

if(this[name]) ...チェック(な名前のクラスがすでに登録されている場合は、この文脈で示しています。)

あなたがエラーを取得している事実は、次の2つを登録しようとしたことを意味します同じ名前のクラス。

0

this[X]if condition値の中身をチェックしますthis[name]undefinedある場合undefined

if (this[name]) throw 'Class ' + name + ' already created'; 

あるif声明になりません。

var chkCondition; 

alert(chkCondition); 

// This will not goes inside if because chkCondition is undefined. 
if (chkCondition) { 
    alert('yes'); 
} 

chkCondition="A"; 

// Now chkCondition has value "A" that's why it will return 
// true and goes inside if and alert "yes" 
if (chkCondition) { 
    alert('yes'); 
} 

Demo

関連する問題