Методы класса в Javascript - PullRequest
       5

Методы класса в Javascript

4 голосов
/ 10 апреля 2011

Я пытаюсь научиться применять базовые объектно-ориентированные концепции к 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() извне?

Ответы [ 3 ]

6 голосов
/ 10 апреля 2011

Я думаю, что вы путаете так называемые методы экземпляра и методы класса .

prototype используется для создания методов экземпляра , которые принадлежат объектам, созданным из prototype при использовании с ключевым словом new:

var foo = new Foo();
foo.bar(); // Will work

Я не уверен, что это то, что вы хотите. Скорее всего, вы просто хотите добавить статический метод класса к Foo:

var Foo = {};
Foo.bar = function () { alert('blah'); };
Foo.bar(); // Will work
1 голос
/ 10 апреля 2011

Я написал несколько лет назад, объясняет; он объясняет тонкости структуры класса JavaScript:

http://www.htmlgoodies.com/primers/jsp/article.php/3600451/Javascript-Basics-Part-8.htm

1 голос
/ 10 апреля 2011

Вместо Foo.prototype.bar... просто используйте Foo.bar = function() {...}, который просто добавит член bar к функциональному объекту Foo.

Чтобы получить доступ к любому члену prototype или this.*, сначала необходим экземпляр: new Foo().bar().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...