将函数应用于 JavaScript 中的对象
applying functions to objects in javascript
请原谅初学者的问题,但我很难理解这个问题。使用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();
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值