将参数传递给JavaScript中的原型函数?

如何将一个对象从一个函数传递给它自己的原型类型的函数?将参数传递给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...

其中每个环节增加了一键初始对象

回答:

我想,也许你正在寻找的东西像下面这样:

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)

回答:

我觉得你它在错误的方式去..你看:

  • 的警报不是来自最后一行,而是来自原型行,当你做“新的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);

}

尽管这样,您将无法通过自己使用的功能。

回答:

有三种不同的问题:

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

以上是 将参数传递给JavaScript中的原型函数? 的全部内容, 来源链接: utcz.com/qa/260320.html

回到顶部