Javascript 避免在本模块中使用eval
我有一个模块模式,它存储了一堆变量。我想创建一个可以返回任何给定变量的函数(实际模块有实际函数-这只是一个分条版本) 例如使用Javascript 避免在本模块中使用eval,javascript,eval,Javascript,Eval,我有一个模块模式,它存储了一堆变量。我想创建一个可以返回任何给定变量的函数(实际模块有实际函数-这只是一个分条版本) 例如使用myObject.getMe('phone')将弹出“1-800-555-1234” 我想避免使用eval(),因为它太邪恶了 谢谢 通过面向对象的方式,您可以首先使用成员*\u savings*、*\u year*、*\u phone*创建原型定义。将getMe添加到原型: var myClass = function() { this._savings = '
myObject.getMe('phone')代码>将弹出“1-800-555-1234”
我想避免使用eval(),因为它太邪恶了
谢谢 通过面向对象的方式,您可以首先使用成员*\u savings*、*\u year*、*\u phone*创建原型定义。将getMe添加到原型:
var myClass = function() {
this._savings = '100',
this._year = new Date().getFullYear(),
this._phone = '1-800-555-1234';
myClass.prototype.getMe = function(param) {
return this[param];
}
}
然后实例化该对象并运行该方法:
var myObject = new myClass();
console.log(myObject.getMe("_savings"));
// "100"
编辑原始答案(正如Dancrumb指出的,这不起作用;它们是私有成员,因此在函数getMe中无法看到它们)
使用括号表示法:
返回此[param]
尝试以下操作:
var myObject = (function() {
var data = {
savings: '100',
year: new Date().getFullYear(),
phone: '1-800-555-1234'
};
return {
getMe: function(param) {return data[param];}
};
})();
在javascript中,object.field
相当于object[“field”]
现在,这里的问题是,您已经创建了一些不属于对象的私有变量,因此访问它们将很棘手
另一种方法是:
var myObject = (function() {
var _privates = {
savings: '100',
year: new Date().getFullYear(),
phone: '1-800-555-1234'
};
return {
getMe: function(param) {
return _privates[param];
}
}())
只适用于公共领域,而不适用于私人领域these@Dancrumb谢谢,你当然是对的。我重写了我的答案。很抱歉继续选择,但现在您已将这些字段公开,这意味着用户可以修改它们。OP的技术使它们成为只读的
var myObject = (function() {
var _privates = {
savings: '100',
year: new Date().getFullYear(),
phone: '1-800-555-1234'
};
return {
getMe: function(param) {
return _privates[param];
}
}())
var myObject = {
phone: '1-800-555-1234',
year: new Date().getFullYear(),
savings: 100,
getMe: function(param) {
return this[param];
}
};
alert(myObject.getMe('phone'));