2015-08-28 21 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();