1

これを何と呼ぶか​​わからないので、質問を言葉で表現する方法がよくわかりません-> Obj['var] = something

タイトルはそれを要約していると思います。これらの2つの異なる方法でオブジェクトの変数または関数を宣言することに違いはありますか、それとも同じことを行う同じ、異なる方法ですか。

編集:

私のコードの例:

紛らわしい変数名でごめんなさい、大文字に気をつけてください:/

buttons = document.getElementsByClassName('button');
Buttons = new Button_Objs();

for (i = 0 ; i < buttons.length ; i++){
    button = buttons[i];
    Buttons['button' + i] = new Button(button);
}

var Button = function(elem){
    this.buttonType = elem.getAttribute('button-type');
    if (this.buttonType = 'safety'){
        constructSafetyButton(elem, this);
    }
}

function constructSafetyButton(elem, button){

    button['setState'] = function(state){//do something}

}

使用しようとするとブラウザに怒鳴られますbutton.prototype.setState = func...

4

2 に答える 2

4

Obj['var'] = ...(さらにObj.var = ...言えば)参照しているオブジェクトにプロパティを割り当てますObj

例:

var obj = {};
obj['foo'] = 'bar';
// or obj.foo = 'bar';
console.log(obj.foo); // shows 'bar'

Obj.prototype.var = ...関数でない限り、エラーがスローされる可能性Objがあります。関数には、関数がコンストラクター関数として呼び出されたとき、つまりキーワードを使用して呼び出されたときに、すべての新しいインスタンスが継承するという特別なプロパティがあります。prototypenew

例:

function Foo() {}
Foo.prototype.bar = 'baz';

var foo = new Foo();
console.log(foo.bar); // shows 'baz'

関数自体もオブジェクトであるため、それらにプロパティを割り当てることもできます

Foo.someProp = 'someVal';

ただし、これはによって作成されたインスタンスにはまったく影響しませんFoo。新しいインスタンスは以下からのみ継承しFoo.prototypeます:

console.log(foo.someProp); // shows undefined

どちらのステートメントもプロパティをオブジェクトに割り当てますが(この点では「同じ」です)、結果はまったく異なります。

JavaScriptでのプロトタイプの継承について詳しく知りたい場合は、MDN-オブジェクトモデルの詳細MDN-継承とプロトタイプチェーンをご覧ください。

于 2012-12-23T06:33:49.430 に答える
3

タイトルの質問に基づいて、違いはありません。

Obj['var'] = something

これと同等です:

Obj.var = something;

prototypeこれは、あるオブジェクトのプロパティに値を設定することとはまったく異なります。

Obj.prototype.var = somthing
于 2012-12-23T06:29:25.280 に答える