Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免在本模块中使用eval_Javascript_Eval - Fatal编程技术网

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'));