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

时间:2013-07-25 22:26:17

标签: javascript prototype

如何将对象从函数传递给它自己的原型函数?

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...

每个链接都为初始对象添加一个键

3 个答案:

答案 0 :(得分:2)

有三个不同的问题:

1)您不使用new Main()创建对象,而是尝试直接从构造函数访问Sub属性。这不起作用。您必须创建一个实例:

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

2)您尝试使用my_object访问属性this,但在任何函数之外。这也行不通。 this可能指向窗口对象,该对象没有任何名为my_object的属性。解决方案可能是写main.my_object,但这会破坏原型的目的。通常,您会为每个实例添加相同的函数或属性。但是你试图在那里放置一个属性,每个实例应该是不同的。因此看起来您根本不需要访问原型,但可以将其定义为常规属性:

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

3)行main.Sub不执行任何操作。您只是要求财产Sub。相反,当您编写Sub时,将执行函数new Sub(...)。因此,如果您想通过调用函数来提醒某些内容,则必须定义一个函数。例如,您可以在SubSub.prototype中定义警报方法,然后调用此方法:

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

main.Sub.alert();

<强> updated Fiddle

答案 1 :(得分:1)

我认为你会以错误的方式解决它......你看:

  • 当您执行“new 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()

这有帮助吗?

修改

此外,您甚至可以为Sub函数执行类似的操作:

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

虽然这样,你将无法单独使用该功能。

答案 2 :(得分: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)