2016-11-20 109 views
0

让我们有一个JavaScript“类”的Javascript得到类声明属性名

var User= function(id, firstName, lastName) { 
     this.id=id; 
     this.firstName=firstName; 
     this.lastName=lastName 
    } 
    var user = new User (1,"I", "am"); 

我想引用用户类的特定字段名,可以说id字段,不使用字符串“ID”

...像(user->id).getName();(应返回字符串“ID”)

注:枚举用户对象属性并没有帮助我,因为我将不得不使用字符串“ID”中他们选择等硬编码

希望我清楚。

目标是选择一些用户对象的属性来填充表格,而不用将对象属性硬编码为字符串。 谢谢

+0

所以,基本上,你想从字典中得到一个项目,没有密钥? –

+0

大声笑。关键是存在的,我的问题是:我可以从属性类声明 – tit

+0

访问它请详细说明你想要的。我想你不想硬编码用户[“ID”]和提取用户的ID。 –

回答

0

使用下面的函数。你会得到你的对象中的所有键的数组。

var hasOwn = Object.prototype.hasOwnProperty; 
     Object.keys = Object_keys; 
     function Object_keys(obj) { 
      var keys = [], name; 
      for (name in obj) { 
       if (hasOwn.call(obj, name)) { 
        keys.push(name); 
       } 
      } 
      return keys; 
     } 

现在,你不必硬编码的东西。只需将函数响应存储到var并使用循环来按顺序获取值。

+0

这枚举了对象属性,但我将不得不对字符串硬编码我想要的密钥(例如“id”) – tit

0

执行此操作的一种方法可能是为每个属性实现一个静态访问的具有相同名称的函数。

...而是paintfull写(需要复制每一个财产申报和错误可能追加)

var User= function(id, firstName, lastName) { 
     this.id=id; 
     this.firstName=firstName; 
     this.lastName=lastName 
    }; 
    User.id=function() {return "id"}; 
    User.firstName=function() {return "firstName"}; 
    User.lastName=function() {return "lastName"}; 

有了它,我可以访问属性的名称,而不喜欢

(太多)歧义
var user = new User (1,"I", "am"); 
var myFieldList=[User.id(), User.firstName()]; 

代替

var myFieldList=["id", "firstName"];