2012-04-06 32 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