0

問題は、JavaScript でオブジェクト初期化子を使用して次のような構造を作成することは可能ですか?

var human = new function (years) {
    var age = years;
    Object.defineProperties(this, {
        age: {
            enumerable:true,
            get: function () {
                return age;
            },
            set: function (value) {
                if( typeof value != 'number') throw 'Age must be a number';
                age = value;
            }
        }
    });
}

私がやろうとしたこと:

var years = 0;
var human = {
    _age: years,
    get age () {
        return this._age;
    },
    set age (value) {
        if( typeof value != 'number') throw 'Age must be a number';
        this._age = value;
    }
}

この例はより直感的で「使いやすい」(少なくとも私にとっては) ですが、前の例のように「_age」がローカルである必要があります。

オブジェクト初期化子でローカル変数を作成することは可能ですか?

4

1 に答える 1

1

次のことができます。

    function myObject(){
      var privateVar = 'default';

      this.setPrivateVar = function(val){
        privateVar = val;
      }

      this.getPrivateVar= function(){
        return privateVar;
      }

    }

var obj = new myObject();
alert(obj.privateVar); //undefined
alert(obj.getPrivateVar()) // default

もう一つの例:

   function myObject(){
       var privatVariable = 'default';
       return {
           getVal : function(){
                return privatVariable;
           }
       }
   }

var obj = myObject();
于 2012-04-06T21:43:51.533 に答える