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

时间:2014-12-10 18:30:52

标签: javascript

执行此操作有什么区别.functionName vs this.functionName()?我对这两者之间没有明确的了解。

4 个答案:

答案 0 :(得分:5)

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

this.functionName()读取对象functionName 的属性this的值,尝试将其称为函数。如果this.functionName的值不是函数,则会抛出错误。

将语句分解为

this.functionName()
\____callee_____/
\_CallExpression__/

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

Check out the AST如果你很好奇。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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请求完成后调用。

答案 3 :(得分:1)

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

如果要在调用函数之前检查函数是否存在,这可能很有用,例如

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

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