请原谅初学者的问题,但我很难绕过这个问题。使用jquery我可以做这样的事情:
$.each(array, testF);
function testF(){
console.log(this.name);
}
使用$ .each我可以将数组传递给函数testF,并访问数组每一行中包含的对象。但是,当我尝试做类似的事情时:
array[0].testF()
我收到一条错误,指出Object没有方法'testF'。我想知道是否有人可以解释这里发生了什么......为什么jQuery可以工作,但第二个没有。再次请原谅初学者的问题。
答案 0 :(得分:4)
$.each(array, testF)
为testF(i, elem)
绑定到this
的数组中的每个元素调用elem
。array[0].testF()
尝试调用testF()
上存在的方法array[0]
$.each()
所做的等价物是testF.call(array[0], 0, array[0])
,或者因为你不使用你可以简化的参数testF.call(array[0])
答案 1 :(得分:2)
这样做:
testF.call( array[0] );
使用call
函数方法可以设置函数调用的上下文(this
值)。因此,只要您想要使用自定义上下文调用函数,而不是fn();
,请执行fn.call( context );
。
答案 2 :(得分:1)
这是因为对象数组[0]没有函数testF, 您需要先申报。 像这样:
array[0].testF = function testF()
{
console.log(this.name);
}
array[0].testF();
答案 3 :(得分:1)
当你写array[0].testF()
时,这意味着:
array
"0"
"testF"
this
指定给array[0]
)但是,在大多数情况下,array[0]
不会定义属性testF
。如果你事先这样做的话:
array[0].testF = testF;
然后它会起作用。