2015-08-28 56 views
0

我的JavaScript代码JavaScript方法和属性调用的区别混淆

var persona = {}; 
var _id = 3; 

var getId = function() { 
    console.log("getId called") 
    return _id; 
} 
persona.getId = getId; 

所以,当我打电话使用persona.getId = getId;getId方法时不被调用。和控制台不打印

的getId称为


UPDATE


搜索后,了解它们之间的区别。 因此,更新我的问题。

persona.getId = getId; & persona.getId = getId();

这两个句子做不同的工作。

persona.getId = getId();

上面的语句存储由的getId()函数来persona.getId属性返回的值。

persona.getId = getId;

上面的语句存储中的getId()函数来persona.getId属性的参考。由于存储在persona.getId中的值是函数引用,所以persona.getId也是一个函数。它可以使用下面的代码 -

persona.getId();

回答

1

当我使用persona.getId = getId;它不被称为调用的getId方法

通过使用persona.getId = getId;被调用,你只是创建参考getId()。你不打电话给getId方法。

要调用该方法,您需要在最终函数名称中添加()

persona.getId = getId(); 
//     ^^ 

通过调用函数getId(),返回的结果将assinged到persona.getId

演示

var persona = {}; 
 
var _id = 3; 
 

 
var getId = function() { 
 
    document.write("getId called") 
 
    return _id; 
 
}; 
 
persona.getId = getId(); 
 

 
console.log(persona);

+0

你是什么意思到的getId创建引用()? – Anita

+0

@Anita这意味着你可以通过它的别名调用该函数。尝试在控制台'function a(){alert('In a'); } var b = a; B();' – Tushar

0

当然它不会叫。要调用任何方法,你需要在最后添加();

var persona = {}; 
var _id = 3; 

var getId = function() { 
    console.log("getId called") 
    return _id; 
} 
persona.getId = getId; 

这里您只是创建了getId函数的引用。

要调用的getId你需要这样做:

getId(); 
persona.getId();