3

请原谅初学者的问题,但我很难解决这个问题。使用 jquery 我可以做这样的事情:

$.each(array, testF); 

function testF(){
    console.log(this.name);  
}

使用 $.each 我可以将数组传递给函数 testF,并访问包含在数组每一行中的对象。但是当我尝试做类似的事情时:

array[0].testF()

我收到一条错误消息,指出该对象没有方法“testF”。我想知道是否有人可以解释这里发生了什么......为什么 jQuery 一个有效,但第二个无效。再次,请原谅初学者的问题。

4

4 回答 4

4
  • $.each(array, testF)调用绑定到testF(i, elem)的数组中的每个元素。thiselem
  • array[0].testF()尝试调用testF()存在于array[0]

相当于什么$.each()testF.call(array[0], 0, array[0])或者因为你不使用你可以简单的参数testF.call(array[0])

有关. _ _.call()

于 2012-05-13T20:21:37.660 回答
2

这样做:

testF.call( array[0] );

call函数方法使您能够设置函数调用的上下文(值this)。因此,每当您想调用具有自定义上下文的函数时fn();,请不要使用fn.call( context );.

于 2012-05-13T20:22:29.107 回答
1

这是因为对象数组 [0] 没有函数 testF,您需要先声明它。像这样:

array[0].testF = function testF()
{
    console.log(this.name);
}

array[0].testF();
于 2012-05-13T20:24:15.307 回答
1

当你写 时array[0].testF(),这意味着:

  • 查找变量array
  • 取索引下的元素"0"
  • 其中,取索引下的元素"testF"
  • 并将其作为函数执行(还将特殊变量分配thisarray[0]

但是,在大多数情况下,array[0]不会有一个属性testF定义。如果您要事先执行此操作:

array[0].testF = testF;

那么它会起作用。

于 2012-05-13T20:24:48.110 回答