gpt4 book ai didi

javascript - 从字符串绑定(bind)函数

转载 作者:行者123 更新时间:2023-11-30 17:40:37 25 4
gpt4 key购买 nike

我有一个自定义的 ASP.Net 控件,它有一个要附加到 javascript 对象中的函数名称:

<custom:myControl runat="server" id="something" OnClientOpened="myFunc" />

然后我有一个具有字符串“myFunc”的状态 javascript 对象:

state.onClientOpened // contains "myFunc"

我像这样将一个函数绑定(bind)到 slideUp 参数:

// this code is inside an Object
// Simplified for clarity

$el.slideUp(200, window[state.onClientOpened]);

我无法控制 OnClientOpened 属性中的内容,因此我测试了一些不在全局命名空间中的内容:

var MyObject = function() {

var myFunc = function() {
doSomething();
};

return {
myFunc: myFunc
};
}();

state.onClientOpened 现在将包含:

onClientOpened = "MyObject.myFunc";

这显然打破了它。最好的方法是什么?我正在考虑某种评估,但如果可能的话,我希望采用另一种方法。

评估解决方案:

$el.slideUp(200, eval("window." + state.onClientOpened));

最佳答案

只需将所有代码包装在一个匿名函数中,而不是其中的一部分,那么您就不必担心全局 namespace 污染。而且您不需要引用整个 window rigamarole,只需将函数称为回调本身即可。

(function () {

var myFunc = function() {
doSomething();
};

// Simplified for clarity
$el.slideUp(200, myFunc);

})();

方法二

var MyObject = {

myFunc: function() {
doSomething();
}

};

onClientOpened = MyObject.myFunc;

方法三

// approach 2, but with this change:
onClientOpened = MyObject["myFunc"];

// or if MyObject also comes from the server,
onClientOpened = window["MyObject"]["myFunc"]

关于javascript - 从字符串绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com