this.function 和 this.function() 之间的区别

Difference between this.function and this.function()

本文关键字:this function 区别 之间      更新时间:2023-09-26

这样做有什么区别.functionName vs this.functionName()?我之间没有一个明确的理解。

this.functionName读取对象this的属性functionName的值。

this.functionName()读取对象this的属性functionName的值,尝试将其作为函数调用。如果 this.functionName 的值不是函数,它将引发错误。

将语句分解为

this.functionName()
'____callee_____/
'_CallExpression__/

"被调用方"可以是任何表达式,但必须解析为函数对象。

如果您好奇,请查看 AST。

计算时,第一个只是对函数的引用,在第二种情况下,函数被执行,表达式将被计算为函数的返回值。

this.functionName是对函数对象的引用。

如果您想在调用函数之前检查函数是否存在,这会很有用,例如

if (typeof(this.functionname) == 'function') {
    this.functionname();
}

this.functionName()实际上调用了该函数。

this.functionName 返回函数本身,this.functionName() 将执行函数并返回结果

function A() { 
    this.doSomething = function() { 
        return "A"; 
    } 
    this.doOtherThing = function() { 
        console.log(this.doSomething); 
        console.log(this.doSomething());         
    }     
}
var a = new A();
a.doOtherThing()

将以下内容打印到控制台:

function () { 
  return "A"; 
}
A
第一个是函数

本身,第二个是函数的结果。您可能希望返回函数而不执行它的原因有很多,例如,可以将其传递给另一个函数,以便在 AJAX 请求完成后调用。