伙计们,我正在努力理解为什么调用真正的工作,我是新的面向对象的java脚本,这个关键字和函数,如call。
我在网上的一个节目中找到了下面这一行:
this.tabs = [].slice.call( this.el.querySelectorAll( 'nav > ul > li' );我试着理解了每个函数,并且非常成功,实际上下面的线程帮助了我:
但是,理解调用有点困难,尤其是在查看MDN呼叫医生之后。
我不太理解MDN文档中的这个示例:
使用调用来调用匿名函数:
var animals = [
{ species: 'Lion', name: 'King' },
{ species: 'Whale', name: 'Fail' }
];
for (var i = 0; i < animals.length; i++) {
(function(i) {
this.print = function() {
console.log('#' + i + ' ' + this.species
+ ': ' + this.name);
}
this.print();
}).call(animals[i], i);
}现在我理解了对象文字,我理解了for循环,我理解了生命,我理解了this.print();调用的函数,
不过,我不明白的是下面这句话:
call(animals[i], i);以及传递给它的参数。
致以亲切的问候。
发布于 2015-02-07 23:48:44
(function () { ... }).call(animals[i], i)使用参数i调用函数(function () { ... }) "on“对象animals[i] (即:在调用范围内,this将是animals[i])。
换句话说,它相当于:
animals[i].f = function () { ... };
animals[i].f(i);除非不需要设置animals[i].f。
发布于 2015-02-07 23:53:56
也许解释它的一个更简单的方法是把它倒下来一点:
(function(i) {
this.print = function() {
console.log('#' + i + ' ' + this.species
+ ': ' + this.name);
}
this.print();
}).call(animals[i], i);至
(function(i) {...}).call(animals[i], i);这个调用可能被错误地认为是应用于动物,但实际上是应用于已经定义的匿名函数。换句话说,在刚刚创建的匿名函数上调用"call“方法。通过这种方式,该函数被应用到动物身上,而无需显式地定义它。
https://stackoverflow.com/questions/28388891
复制相似问题