2013-07-25 109 views
3

如何將一個對象從一個函數傳遞給它自己的原型類型的函數?將參數傳遞給JavaScript中的原型函數?

function Main() 
{ 
    this.my_object = {"key":123}; 
} 

Main.prototype.Sub = new Sub(this.my_object); 

function Sub(obj) 
{ 
    alert(obj); 
} 

Main.Sub; //this should alert the object created in Main() 

小提琴:http://jsfiddle.net/GkHc4/

編輯1:

我試圖做的功能鏈,每一個環節必須把以前的對象,並添加一些東西。在這一點上,這是一個實驗。例如:

Main.Link1.Link2.link3(); 

//link3 it's a prototype for link2 
//link2 it's a prototype for link1 
//and so on... 

其中每個環節增加了一鍵初始對象

+0

什麼是你正在試圖解決的實際問題? 'Main'是一個函數對象。如果你想能夠訪問'Main.Sub',你必須首先分配給'Main.Sub'。 –

+0

'new Sub(this.my_object);','this'在這裏指'window'對象。 –

回答

1

我想,也許你正在尋找的東西像下面這樣:

function Main() 
{ 
    this.my_object = {"key":123}; 
} 

Main.prototype.Sub = function() { 
    Sub(this.my_object); 
}; 

function Sub(obj) 
{ 
    alert(obj); 
} 

var main = new Main(); // main object is created with main.my_object property 
main.Sub(); // this will do alert(main.my_object) 
+0

是啊!就像那樣。非常感謝你! –

1

我覺得你它在錯誤的方式去..你看:

  • 的警報不是來自最後一行,而是來自原型行,當你做「新的Sub」時。

也許一個更好的辦法是這樣的:

function Main() 
{ 
    this.my_object = {"key":123}; 
} 

Main.prototype.Sub = Sub; //You set the prototype, but don't actually execute the function 

function Sub(obj) 
{ 
    alert(obj); 
} 

var m = new Main(); //You need to create a new object of type Main in order for it to have access to the method Sub 
m.Sub(m.my_object); //this should alert the object created in new Main() 

這是否幫助?

編輯

此外,你甚至可以做這樣的事情的子功能:

function Sub() { 
    alert(this.my_object); 
} 

儘管這樣,您將無法通過自己使用的功能。

2

有三種不同的問題:

1)你沒有創建new Main()一個對象,但嘗試訪問Sub屬性直接來自構造函數。這不起作用。你必須創建一個實例:

var main = new Main(); 
main.Sub; //<-- now you can access it 

2)您嘗試this訪問屬性my_object,但在任何函數之外。那也行不通。 this可能會指向窗口對象,它沒有任何屬性,稱爲my_object。解決辦法可能是編寫main.my_object,但那樣會打破原型的目的。通常你會在那裏爲每個實例放置相同的函數或屬性。但是你試圖在那裏放置一個不同的財產。所以看起來你並不需要在所有訪問原型,但可以只把它定義爲一個普通的屬性:

function Main() 
{ 
    this.my_object = {"key":123}; 
    this.Sub = new Sub(this.my_object); 
} 

3)行main.Sub不執行任何東西。您只是要求酒店Sub。當您編寫new Sub(...)時,將會執行功能Sub。所以如果你想通過調用一個函數來提醒某些事情,你必須定義一個函數。你可以例如在SubSub.prototype定義警報的方法,然後調用此方法:

function Sub(obj) 
{ 
    this.alert() { 
     alert(obj); 
    } 
} 

main.Sub.alert(); 

updated Fiddle

+0

感謝您的回答!它真的爲我澄清了某些事情! –

相關問題