2013-07-25 89 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

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

相关问题