1

我有这个存储一堆变量的模块模式。我想创建一个可以返回任何给定 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(),因为它太邪恶了。

谢谢!

4

4 回答 4

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];
  }
}())
于 2012-06-22T16:50:29.763 回答
0

尝试以下操作:

var myObject = (function() {
    var data = {
        savings: '100',
        year: new Date().getFullYear(),
        phone: '1-800-555-1234'
    };
    return {
        getMe: function(param) {return data[param];}
    };
})();
于 2012-06-22T16:48:18.947 回答
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函数内部无法看到它们)。

使用括号表示法:

返回这个[参数];

于 2012-06-22T16:47:06.933 回答
0
var myObject = {
    phone: '1-800-555-1234',
    year: new Date().getFullYear(),
    savings: 100,
    getMe: function(param) {
        return this[param];
    }
};
alert(myObject.getMe('phone'));
于 2012-06-22T16:52:08.887 回答