JS调用方法,为什么不只是使用括号?

时间:2016-03-07 16:35:36

标签: javascript

所以,我有一些看起来像这样的代码(从一个闭源项目中通用化)。

this.firstInit(name);

这是我第一次看到JS中使用的调用方法,它看起来与用括号调用函数完全相同,例如。

call

那么 (Get-WmiObject Win32_Processor).LoadPercentage >> CPU_LOG.txt Start-Sleep -Seconds 1 在这做什么?它的行为有何不同?

2 个答案:

答案 0 :(得分:3)

call()没有做你认为它在这里做的事情。它实际上改变了thisfirstInitsecondInit的上下文。

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');

thisfirstInit函数的secondInit对象将是字符串'some name',参数name值将为undefined < / p>

UserWizard.firstInit('some name')

与:

相同
UserWizard.firstInit.call(UserWizard, 'some name');

希望我很清楚