JS:有没有办法告诉什么对象叫做函数?

时间:2009-04-21 14:36:16

标签: javascript

在函数中有没有办法获取对调用它的对象的引用?我在页面上有一个Flash对象的相同实例两次,每个都可以通过ExternalInterface调用JS,我不能将Flash对象编码为每个传递一个不同的ID,因为它是同一个Flash对象的2个实例,所以它在那里JS获取对哪个函数调用函数的方法?

谢谢!

4 个答案:

答案 0 :(得分:3)

实例化时,无法将ID传递给Flash对象吗? (通过查询字符串或参数)。然后,您可以在JavaScript函数调用中使用该ID。

答案 1 :(得分:2)

我不知道ExternalInterface但您是否尝试在执行函数期间检查this对象?

当然你总是可以使用一个闭包。最终,您必须为Flash对象提供要执行的功能。例如,我有myObj1myObj2采用回调方法fnCallback但由于某种原因,在执行此函数时不会设置this上下文。因此我可以这样做: -

function setCallback(obj, fn)
{
  obj.callback = function() {fn.apply(obj, arguments);}
}

setCallback(myObj1, fnCallback);
setCallback(myObj2, fnCallback);

现在我可以使用this编写fnCallback作为对调用该函数的特定对象的引用。

答案 2 :(得分:0)

arguments.callerFunction.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"
}