javascript是否可以使用字符串来调用对象函数

时间:2011-11-05 06:23:50

标签: javascript string function object dynamic

我有一个泛型函数,可以在适当的对象中与多个其他函数对话,是否可以使用字符串来调用相应的函数。

 var string = "save";

 var generic = (new function (string) { 

                string."alert()";


               return this;
               })




 var save = (new function (string) { 

    this.alert = (function () {

              alert("your document has been saved")                    

              return this         

              })

        return this 
          })

var notSaved = (new function (string) { 

    this.alert = (function () {

              alert("your document has not been saved")                    

              return this         

              })

        return this 
          })

我正在使用它进行更复杂的设置,但这是一个例子。这可能吗?

4 个答案:

答案 0 :(得分:1)

当然可以。尝试这样的事情:

window[string].alert();

答案 1 :(得分:1)

查看您的代码很难说明您实际尝试实现的目标。尽管如此,这里有一些可能相关的想法。

首先,让我们做几个对象:

var rabbit = {
  name: 'Peter',
  hop: function () {
    return this.name + ' hopped!'
  },
  jump: function () {
    return this.name + ' jumped!'
  }
}

var hairy_maclary = {
  name: 'Hairy Maclary',
  jump: function () {
    return this.name + ' jumped over the fence!'
  }
}

现在,您可以定义一个函数,该函数在传递给它的任何对象上调用hop方法:

function hop(object) {
  return object.hop()
}

hop(rabbit) // 'Peter hopped!'

我不确定你为什么这样做而不是直接调用hop,但也许你想在之前或之后做更多的事情。

如果您愿意,可以创建一个完全通用的函数,该函数将调用给定对象上的给定方法:

function invokeMethod(object, method) {
  object[method]()
}

invokeMethod(hairy_maclary, 'jump') // 'Hairy Maclary jumped over the fence!'

但是,这是一件非常奇怪的事情。也许你可以提供更多关于你实际尝试做什么的想法,因为你的示例代码相当奇怪。

答案 2 :(得分:0)

您可以将您的函数包含在某个对象中,这样您就可以通过使用某个变量(在本例中名为string)传递属性的名称来访问,例如。那样:

var string = 'notSaved';
var funcs = {};

funcs.save = new function(){
    this.alert = function(){
        alert('called save.alert()');
    };
    return this;
};

funcs.notSaved = new function(){
    this.alert = function(){
        alert('called notSaved.alert()');
    };
    return this;
};

funcs[string].alert();

请参阅working example on jsfiddle

如果您的变量是全局的(它们不应该),它们也会自动包含在window对象中,因此您也可以像这样调用它们:window[string].alert()。这不适用于非全局函数(在这种情况下,我的解决方案似乎是唯一一个不使用eval())的解决方案。

答案 3 :(得分:-1)

的eval( “警报( '测试');”);

您可以使用eval调用函数。即使你可以声明函数。

eval(“function test(){alert(”test“);}”);

试验();