4

私はJavascriptアクセサプロパティで遊んでいます(JavaScriptを勉強するためにゼロから再起動しています)、単純なオブジェクトのゲッターとセッターを作成しようとしています。コードは次のとおりです。

var dummy = {
        name: 'empty',
        description: 'static description',

        get nameAccessor(){return 'name value is: ' + this.name;},
        set nameAccessor(value){ this.name = value;},

        get descAccessor(){return 'desccription value is: ' + this.description;},
};

console.log(dummy.nameAccessor);
console.log(dummy.nameAccessor('Mazinga'));
console.log(dummy.nameAccessor);

しかし、それはエラーをスローします:

キャッチされていない TypeError: オブジェクト # のプロパティ 'nameAccessor' は関数ではありません

セッターコードを実行すると:

    console.log(dummy.nameAccessor('Mazinga'));

ここで何がうまくいかないのですか?

編集

わかりました、それはjavascriptのよく知られた機能ではないようですが、 Javascriptの次の例に従いました: Definitive Guide

var o = { 
          data_prop: value,
          get accessor_prop() { /* function body here */ },
          set accessor_prop(value) { /* function body here */ }
    };
4

3 に答える 3

10

アクセサーは、オブジェクトのプロパティとしての関数 ("メソッド") ではなく、そのプロパティが割り当てられた (set)または取得された (get)ときに呼び出される関数です。使用する

dummy.nameAccessor = 'Mazinga';

セッター関数を呼び出します。

対照的にdummy.nameAccessor('Mazinga')、プロパティ "nameAccessor" (名前文字列になります) を取得し、それを関数として呼び出そうとしますが、失敗します。ゲッターが関数を返す場合は機能しますが、それはここで必要なものではありません。

于 2012-08-30T10:42:37.037 に答える
0

dummy.nameAccessorは関数ではなく、文字列name value is: emptyです。

于 2012-08-30T10:43:51.670 に答える
-4

メソッドの構文が正しくありません。試してください:

var dummy = {

    name: 'empty',
    description: 'static description',

    getName : function(){return 'name value is: ' + this.name;},
    setName : function(value){ this.name = value;},
    getDesc : function(){return 'description value is: ' + this.description;}

};
于 2012-08-30T10:44:18.687 に答える