2012-04-06 64 views
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」是當地的,因爲它是在前面的例子。

是否可以在對象初始值設定項中創建局部變量?

回答

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

你的榜樣是好的,但它是一個類似於C++的形式給出,我想使用一個對象來使用純JavaScript的aproach初始化程序 – micnic 2012-04-06 21:50:28

+0

查看另一個示例。 – Headshota 2012-04-06 21:53:47

+0

我喜歡第二個例子,但我仍然在尋找更容易使用的東西;) – micnic 2012-04-06 21:59:16