我在网上找到了以下一行:
this.tabs = [].slice.call( this.el.querySelectorAll( 'nav > ul > li' );
我尝试了解每个功能并且非常成功,实际上下面的线程帮助了我:
然后理解电话有点困难,特别是在看MDN call doc's之后。
我不太了解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);
}
现在我理解了Object文字,我理解for循环,我理解IIFE,我理解this.print();函数被调用,
我不明白的是以下内容:
call(animals[i], i);
并将参数传递给它。
亲切的问候。
答案 0 :(得分:1)
(function () { ... }).call(animals[i], i)
调用函数(function () { ... })
&#34; on&#34;对象animals[i]
(即:在通话范围内,this
将为animals[i]
),参数为i
。
换句话说,它等同于:
animals[i].f = function () { ... };
animals[i].f(i);
除了不必设置animals[i].f
。
答案 1 :(得分:1)
或许更简单的解释方法是将其折叠一下:
(function(i) {
this.print = function() {
console.log('#' + i + ' ' + this.species
+ ': ' + this.name);
}
this.print();
}).call(animals[i], i);
到
(function(i) {...}).call(animals[i], i);
可能会错误地认为该调用适用于动物[i],但它实际上已应用于已定义的匿名函数。换句话说,正在刚刚创建的匿名函数上调用“call”方法。通过这种方式,该功能可以应用于动物而无需明确定义。