使用原型从该对象内调用对象上的函数

时间:2012-03-07 21:49:51

标签: javascript object prototype

当我试图在同一个对象内调用一个对象上的函数时,我遇到了问题。我已经读过,在该对象中调用对象上的函数是可能的here,所以我认为必须使用prototype导致问题。这是一个例子:

function Foo() {
    this.DoStuff();
}

Foo.prototype.DoStuff = function() {
    alert("I'm frantically doing stuff!");
}

那段代码(或类似的东西)并不想工作。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

你所拥有的应该工作得很好。重要的是要记住this的值取决于你如何调用函数。为了使它按预期工作,您需要使用new运算符将该函数作为构造函数调用:

var foo = new Foo(); //`this` refers to this instance of Foo

这是working example

如果像普通函数一样调用函数,this引用全局对象,它没有DoStuff属性,因此抛出TypeError。这是一个broken example

答案 1 :(得分:0)

我猜你在尝试使用Foo()后声明了你的原型语句。

这应该有效:

Foo.prototype.DoStuff = function() { alert("stuff") };
myfoo = new Foo();

这不应该:

myfoo = new Foo();
Foo.prototype.DoStuff = function() { alert("stuff"); };

答案 2 :(得分:0)

这取决于您如何致电Foo()。如果您直接调用它,则this指的是该上下文中的this。如果您使用new运算符调用它,则this将成为该对象的该实例,然后它就可以访问DoStuff()

var foo = new Foo(); // works!