我有这个模块模式,存储了一堆变量。我想创建一个可以返回任何给定var的单个函数(真正的模块具有实际函数 - 这只是条带化版本)。
var myObject = (function() {
var _savings = '100',
_year = new Date().getFullYear(),
_phone = '1-800-555-1234';
return {
getMe: function(param) {
return eval(param);
}
一个示例用法是myObject.getMe('phone');
将大肆宣传“1-800-555-1234”
我想避免使用eval(),因为它太邪恶了。
谢谢!
答案 0 :(得分:3)
在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];
}
}())
答案 1 :(得分:0)
以面向对象的方式执行此操作,您可以首先使用成员* _savings *,* _year *,* _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];
答案 2 :(得分:0)
尝试以下方法:
var myObject = (function() {
var data = {
savings: '100',
year: new Date().getFullYear(),
phone: '1-800-555-1234'
};
return {
getMe: function(param) {return data[param];}
};
})();
答案 3 :(得分:0)
var myObject = {
phone: '1-800-555-1234',
year: new Date().getFullYear(),
savings: 100,
getMe: function(param) {
return this[param];
}
};
alert(myObject.getMe('phone'));