2012-04-06 11 views
0

質問:JavaScriptでオブジェクト初期化子を使用してfolowingのような構造を作成することはできますか?私が実行しようとしました何オブジェクトイニシャライザのローカル変数

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は」地元であったことを必要とします前の例。

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

答えて

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(); 
+0

あなたの例では良いですが、それは、私がオブジェクトを使用して、純粋なJavaScriptのaproachを使用したいaproachのようなC++ですイニシャライザ – micnic

+0

別の例を参照してください。 – Headshota

+0

私は2番目の例が好きですが、まだ使いやすいものを探しています;) – micnic