2011-04-07 27 views
1

我有以下情況:對象函數作爲參數傳遞,如何在該函數中訪問父對象?

function dog() 
{ 
    this.name = 'Lumpy'; 
    this.getName = function() { 
     return this.name; 
    } 
} 

function show_dog_name(dogname) 
{ 
    alert(dogname()); 
} 

bigdog = new dog(); 
show_dog_name(bigdog.getName); 

「這」不是指的是「狗」的對象,因此如何在傳遞函數獲得父對象。

+1

你CLA ss在一個地方被稱爲「狗」,在另一個地方被稱爲「狗」。 – 2011-04-07 14:36:20

回答

2
var that = this; 
this.getName = function() { return that.name; }; 
+0

好的答案,補充[jsFiddle示例在這裏](http://jsfiddle.net/swaff/8NWnt/) – Swaff 2011-04-07 14:48:55

+0

謝謝,知道我知道jsFiddle的存在;-) – 2011-04-07 16:24:22

1

您可以創建dog這樣的:

function dog() 
{ 
    var name = 'Lumpy'; 
    this.getName = function() { 
     return name; 
    } 
} 

此創建一個閉包,讓您getName始終能夠訪問name
如果您想讓狗的名字是「公」到你的對象,你可以使用:

​​3210

另一種解決方案包括做出「正確」 this對象總是爲你的getName功能:

var dogObj = this; 
this.name = 'Lumpy'; 
this.getName = function() { 
    return dogObj.name; 
} 
+0

使它變成'var name',你不是真的希望它成爲全球性的,是嗎? ;-) – 2011-04-07 14:40:46

+0

是的,好的,真的,我只是修復它 – 2011-04-07 14:42:55

1

試試這個:

function dog(){ 
    this.name = 'Lumpy'; 
    var obj=this; 
    this.getName = function() { 
     return obj.name; 
    } 
} 

function show_dog_name(dogname){ 
    alert(dogname()); 
} 

bigdog = new dog(); 
show_dog_name(bigdog.getName); 
相關問題