如何将对象从函数传递给它自己的原型函数?
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 :(得分: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(...)
。因此,如果您想通过调用函数来提醒某些内容,则必须定义一个函数。例如,您可以在Sub
或Sub.prototype
中定义警报方法,然后调用此方法:
function Sub(obj)
{
this.alert() {
alert(obj);
}
}
main.Sub.alert();
<强> updated Fiddle 强>
答案 1 :(得分:1)
我认为你会以错误的方式解决它......你看:
也许更好的方法是:
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)