将函数应用于 JavaScript 中的对象

applying functions to objects in javascript

本文关键字:对象 JavaScript 函数 应用于      更新时间:2023-09-26

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

$.each(array, testF); 
function testF(){
    console.log(this.name);  
}

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

array[0].testF()

我收到一个错误,指出对象没有方法"testF"。我想知道是否有人可以解释这里发生的事情......为什么jQuery一个有效,但第二个不起作用。再次,请原谅初学者的问题。

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

$.each()所做的等效是testF.call(array[0], 0, array[0]),或者由于您不使用参数,因此您可以简化testF.call(array[0])

请参阅 MDN 以获取 .call() 的文档。

这样做是这样的:

testF.call( array[0] );

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

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

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

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

array[0].testF = testF;

然后它会起作用。

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

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