避免在此模块中使用 eval

avoid eval in this module

本文关键字:eval 模块      更新时间:2023-09-26

我有这个模块模式来存储一堆变量。我想创建一个可以返回任何给定 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中没有办法看到他们)。

使用括号表示法:

返回这个[参数];