JQuery:如何编写一个插件函数,将函数名称作为字符串并运行它?

时间:2010-10-30 02:18:58

标签: jquery function dynamic

我正面临挑战,不知道如何在jQuery中解决这个问题。

我的目的是编写一个替换Facebook callSWF函数的扩展函数。

Facebook callSWF run like that:   **domObj.callSWF("myFunctionName", param1, param2 ... paramx);**

现在,我需要替换该功能。对于jQuery,我可以通过JS调用Flash:

if($('#swfObj')[0])
 {
  $('#swfObj')[0].myFunctionName(param1, param2 ...);
 }
 else
 {
  $('#swfObj').myFunctionName(param1,param2 ...);
 }

然而,这意味着我必须更改以前调用“callSWF”的50多个不同的地方,并用这个具有不同功能名称的代码块替换。这不好。

所以,我决定写一个扩展名。理想情况下,我可以这样打电话:

$('#swfObj')。callSWF(“myFunctionName”,param1,param2 ...);

我开始编写函数并卡住....到目前为止,这是我的代码:

(function( $ ){
  $.fn.callSWF = function(swfFuncName, param1) {

 if($(this)[0])
 {
  $(this)[0].**swfFuncName**(param1);
 }
 else
 {
  $(this).**swfFuncName**(param1);
 }

 return this;
  };
})( jQuery );

我不知道该怎么做的部分是......动态传递函数名称(这是swf函数名)。所以,swfFuncName会有所不同,具体取决于我要与之通信的flash函数。

例如我可以这样做:

**$('#swfObj').callSWF("showMyName", 'whatever');**
**$('#swfObj').callSWF("anotherFunction", 1234);**
**$('#swfObj').callSWF("yetAnotherFunction", 'kbieure');**

任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

关键是使用大多数人称之为“数组”的语法而不是“对象”语法来引用$(this)[0]$(this)的适当属性(视情况而定)

 if($(this)[0])
 {
  $(this)[0][swfFuncName](param1);
 }
 else
 {
  $(this)[swfFuncName](param1);
 }