如何在 JavaScript 中向预定义函数传递参数?

3
我该如何将一个对象从一个函数传递给其自身的原型函数?
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()

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

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

你试图解决的实际问题是什么?Main是一个函数对象。如果你想要访问Main.Sub,你必须先将其赋值给Main.Sub - Felix Kling
new Sub(this.my_object);,这里的 this 指的是 window 对象。 - The Alpha
3个回答

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将被执行。因此,如果你想通过调用函数来触发提示,你必须定义一个函数。例如,你可以在Sub中或者Sub.prototype中定义一个alert方法,然后调用这个方法:

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

main.Sub.alert();

updated Fiddle


谢谢你的回答!它真的为我澄清了某些事情! - Matías Cánepa

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);
}

虽然这样做,您将无法单独使用该函数。

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)

是的!就是这样。非常感谢你! - Matías Cánepa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接