所以,我有一些看起来像这样的代码(从一个闭源项目中通用化)。
this.firstInit(name);
这是我第一次看到JS中使用的调用方法,它看起来与用括号调用函数完全相同,例如。
call
那么 (Get-WmiObject Win32_Processor).LoadPercentage >> CPU_LOG.txt
Start-Sleep -Seconds 1
在这做什么?它的行为有何不同?
答案 0 :(得分:3)
call()
没有做你认为它在这里做的事情。它实际上改变了this
和firstInit
中secondInit
的上下文。
Function.prototype.call()是mozilla文档的链接,引用那里:
调用现有函数时,可以指定不同的此对象。这指的是当前对象,即调用对象。通过调用,您可以编写一次方法,然后在另一个对象中继承它,而无需重写新对象的方法。 - 由Mozilla Contributors提供
还有另一个功能Function.prototype.bind()我鼓励你去看看。我经常发现我经常使用它,但这是一种类似的想法,用于在稍后调用它时将this
赋值给函数。这有助于防止以下问题:
var person = {
name: 'First Last',
getName: function (){
return this.name;
}
};
var getName = person.getName;
getName(); // returns undefined as `this` is the global window object
答案 1 :(得分:3)
致电
UserWizard.init('some name');
this
和firstInit
函数的secondInit
对象将是字符串'some name',参数name
值将为undefined
< / p>
UserWizard.firstInit('some name')
与:
相同UserWizard.firstInit.call(UserWizard, 'some name');
希望我很清楚