如何将JavaScript字符串转换为JavaScript函数,保留正确的“this”?
问题描述:
浏览器元素具有onpopupshowing属性,该属性是由多个javascript语句组成的字符串。如何将JavaScript字符串转换为JavaScript函数,保留正确的“this”?
我想“重写”那一点的JavaScript。如果这是一个函数,我只是将它分配给一个变量,将我的“覆盖”函数赋值给元素属性,并且(如果需要的话)从我的覆盖函数中调用原始函数,就像这样:
var oldfunc;
function myoverrridingfunc() { my statement; oldfunc(); my other statement; }
oldfunc = element.getAttribute("onpopupshowing")
element.setAttribute("onpopupshowing", myoverrridingfunc);
但element.getAttribute(“onpopupshowing”)不是函数,它是一个字符串。
我可以使用Function对象将字符串转换为函数,但该字符串包含对this
的引用。我如何保留正确的this
?
拦截/覆盖这段脚本的最好方法是什么?注意:这只需要在Firefox中工作,而不是在任何版本的java/ECMAscript中。
谢谢。
答
var oldfuncStr = element.getAttribute("onpopupshowing");
element.removeAttribute("onpopupshowing");
var oldfunc = new Function(oldfuncStr);
element.addEventListener("popupshowing", function()
{
myStatement;
oldfunc.call(this);
otherStatement;
}, false);
call
是专门针对指定this
。我在Firefox中进行测试,但使用onclick
事件而不是onpopupshowing
。
答
也许你正在反思这一点。为什么不把你的JavaScript语句包含在引号中并将其分配给属性?如果该属性需要JavaScript语句作为字符串,我不希望分配函数引用甚至可以工作。 (是吗?)
感谢您的回答。几个问题:原始代码需要事件参数。就像oldfunc.call(this,event)一样简单吗?另外,为什么addEventListener,而不是只是分配一个匿名函数onpopshowing与setAttribute?谢谢你的耐心。 – tpdi 2010-09-10 19:04:26
@tpdi,是的,这是如何将附加参数传递给'call'。通常不鼓励使用on-attributes,其中包括每个元素的限制。但它可能会在这里很好地工作。 – 2010-09-10 19:24:07