在函数中有没有办法获取对调用它的对象的引用?我在页面上有一个Flash对象的相同实例两次,每个都可以通过ExternalInterface调用JS,我不能将Flash对象编码为每个传递一个不同的ID,因为它是同一个Flash对象的2个实例,所以它在那里JS获取对哪个函数调用函数的方法?
谢谢!
答案 0 :(得分:3)
实例化时,无法将ID传递给Flash对象吗? (通过查询字符串或参数)。然后,您可以在JavaScript函数调用中使用该ID。
答案 1 :(得分:2)
我不知道ExternalInterface但您是否尝试在执行函数期间检查this
对象?
当然你总是可以使用一个闭包。最终,您必须为Flash对象提供要执行的功能。例如,我有myObj1
和myObj2
采用回调方法fnCallback
但由于某种原因,在执行此函数时不会设置this
上下文。因此我可以这样做: -
function setCallback(obj, fn)
{
obj.callback = function() {fn.apply(obj, arguments);}
}
setCallback(myObj1, fnCallback);
setCallback(myObj2, fnCallback);
现在我可以使用this
编写fnCallback作为对调用该函数的特定对象的引用。
答案 2 :(得分:0)
arguments.caller或Function.caller但您可能希望重新组织代码以避免使用它们。真的有另一种方法可以得到你想要的 - 我保证。
编辑:AnthonyWJones指出你实际上在寻找this运营商。
此关键字指的是上下文 对象(a.k.a。当前对象)。在 一般来说,在一种方法中,这指的是 调用对象。
答案 3 :(得分:0)
如果您正在寻找一种方法来查找调用函数的非函数元素,您可以考虑使用该事件。这是一个非常方便的函数,我在传递一个事件对象时经常使用它。
function getTargetElement(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "");
var elem;
if (evt.target) {
elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target;
} else {
elem = evt.srcElement;
}
return elem;
}
因此,例如,如果你调用一个函数“find(event);”从单击的元素中,可以对find进行编码以使用此方法来获取事件对象:
function find(evt){
var clickedObj = getTargetElement(evt);
alert(clickedObj.tagName); //alerts "TD"
}