我有一个javascript对象包含许多这样的函数
function obj()
{
this.test1_func = function()
{
return "This is function 1";
}
this.test2_func = function()
{
return "This is function 2";
}
this.test3_func = function()
{
return "This is function 3";
}
// and many other functions like test"x"_func ...
}
在对象的定义中没有,我定义了像这样的属性
Object.defineProperty(this, 'test1',
{
get : function()
{
return this.test1_func();
}
});
Object.defineProperty(this, 'test2',
{
get : function()
{
return this.test2_func();
}
});
Object.defineProperty(this, 'test3',
{
get : function()
{
return this.test3_func();
}
});
有没有一种方法可以让数组中的属性名称和定义所有属性的函数?我创建了一个工作正常的函数,但我使用eval
并且我想知道是否有一种方法可以在没有eval的情况下完成它
this.defineProp = function (prop)
{
for(key in prop)
{
Object.defineProperty(this,prop[key],{ get : function() { return eval("this." + prop[key] + "_func();"); } });
}
}
答案 0 :(得分:2)
您应该能够使用方括号表示法:
Object.defineProperty(this,prop[key],{ get : function() { return this[prop[key] + "_func"](); } });
或者更简洁:
Object.defineProperty(this,prop[key],{ get: this[prop[key] + "_func"]; } });
答案 1 :(得分:0)
试试这个:
this.defineProp = function (prop)
{
for(key in prop)
{
Object.defineProperty(this,prop[key],{ get : function() { return this[prop[key]+"_func"](); } });
}
}
答案 2 :(得分:0)
为什么不通过其他功能简单地公开这些功能呢?
obj.prototype.get = function(testName) {
return this[testName + _func];
};
所以而不是:
obj.test1();
你需要:
obj.get('test1')();