prototype
导致问题。这是一个例子:
function Foo() {
this.DoStuff();
}
Foo.prototype.DoStuff = function() {
alert("I'm frantically doing stuff!");
}
那段代码(或类似的东西)并不想工作。有什么想法吗?
答案 0 :(得分:5)
你所拥有的应该工作得很好。重要的是要记住this
的值取决于你如何调用函数。为了使它按预期工作,您需要使用new
运算符将该函数作为构造函数调用:
var foo = new Foo(); //`this` refers to this instance of Foo
如果像普通函数一样调用函数,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!