我正在尝试学习如何将基本的面向对象概念应用于Javascript。在这里,我只想创建一个类方法,然后在单击<input>
元素时从外部调用该方法:
<html>
<head>
<script type="text/javascript">
var Foo = function()
{
}
Foo.prototype.bar = function() { alert("blah"); }
</script>
</head>
<body>
<input type="submit" onclick = "Foo.bar()">
</body>
</html>
这不起作用。 Firefox提供错误错误:Foo.bar is not a function
但是,如果我直接拨打Foo()
,然后从Foo
内拨打this.bar()
,则可以正常使用。为什么我无法在外部调用Foo.bar()
?
答案 0 :(得分:6)
我认为你混淆了所谓的实例方法和类方法。
prototype
用于创建实例方法,它们属于prototype
与new
关键字一起使用时创建的对象:
var foo = new Foo();
foo.bar(); // Will work
我不确定这是你想要的。您更有可能只想将静态类方法添加到Foo
:
var Foo = {};
Foo.bar = function () { alert('blah'); };
Foo.bar(); // Will work
答案 1 :(得分:1)
而不是Foo.prototype.bar...
只使用Foo.bar = function() {...}
,这只会在bar
函数对象上添加Foo
成员。
要访问任何prototype
或this.*
成员,您首先需要一个实例:new Foo().bar()
。
答案 2 :(得分:1)
http://www.htmlgoodies.com/primers/jsp/article.php/3600451/Javascript-Basics-Part-8.htm