避免在此模块中使用 eval
avoid eval in this module
我有这个模块模式来存储一堆变量。我想创建一个可以返回任何给定 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(),因为它太邪恶了。
谢谢!
在 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];
}
}())
尝试以下操作:
var myObject = (function() {
var data = {
savings: '100',
year: new Date().getFullYear(),
phone: '1-800-555-1234'
};
return {
getMe: function(param) {return data[param];}
};
})();
var myObject = {
phone: '1-800-555-1234',
year: new Date().getFullYear(),
savings: 100,
getMe: function(param) {
return this[param];
}
};
alert(myObject.getMe('phone'));
以面向对象的方式执行此操作,您可以首先使用成员 *_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中没有办法看到他们)。
使用括号表示法:
返回这个[参数];
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 递归使用 eval() 是检查程序执行的好方法吗?
- 为什么忽略了eval()代码中的语法错误
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 找不到模块捆绑包
- JavaScript命名约定;静态“;类或模块
- Javascript eval()无法处理传递的字符串
- 显示模块模式在Knockout中设置模型的新实例
- 避免在此模块中使用 eval
- Javascript中的模块使用eval();