var x = 10;
var o = { x: 15 };
function f()
{
alert(this.x);
}
f();
f.call(o);第一个将显示'10‘,第二个将显示'15’作为输出值。谁能告诉我在哪个实时场景中,我会同时使用'call‘方法和f()。
发布于 2013-02-27 00:17:48
我只是浏览了一下未回答的问题,我不确定这是否会对你有所帮助,但它可能会帮助那些偶然遇到这个问题的人。
通过在函数对象上使用call()方法,可以覆盖函数要引用的this对象。您已经在自己的代码块中演示了预期的结果。
可以注意到,除了预期的参数格式之外,apply()方法执行的功能与call()几乎相同。
call()需要逗号分隔格式的参数,而apply()需要数组形式的参数。对于两者,第一个参数是将覆盖this的对象。
ECMA规范
对于call(),ECMA specification (pdf warning)是这样说的,它展示了它在更改特定函数的执行上下文时的用法:
13.2.1 [调用]
当使用this值和>参数列表调用函数对象F的[Call]内部方法时,将执行以下步骤:
发布于 2015-01-17 06:45:17
任何人都知道在哪个实时场景中,我会同时使用‘
’方法和f()。
作为对象的方法的函数应该使用该对象作为其this来调用,例如,使用内置的Array.prototype.forEach方法,该方法期望该对象是一个数组实例。
但是,该方法是泛型的,因此实例不必是数组,它只需要是一个足够像数组的对象,该方法就可以工作。在大多数浏览器中,可以向它传递一个NodeList,这是一个主机对象(尽管有些浏览器不喜欢这样),所以您可以像这样调用传递NodeList的forEach
Array.prototype.forEach.call(
document.getElementsByTagName('*'),
function(element){
console.log('This element is a ' + element.tagName)
}
);放在文档底部的脚本元素中,上面的代码会将每个元素的标记名写入控制台。
上面的调用有时缩写为:
[].forEach.call(...)它创建一个新的数组实例,并使用它的[[Prototype]]链访问forEach。
因此,您可以看到,对于数组实例,需要使用普通的forEach,并将其单独用于调用。还有其他的情况,在调用方法时,可以将this设置为其他值(例如,DOM元素上的侦听器)。
https://stackoverflow.com/questions/12250503
复制相似问题