JavaScript, наследование классов, переопределение методов - PullRequest
1 голос
/ 03 сентября 2011

Я ищу простой пример создания класса в Javascript, который затем наследуется в подклассе.В частности, я ищу пример переопределения метода.Я понимаю, что у Javascript нет синтаксиса, поддерживающего традиционный ООП, который, кажется, является источником моей проблемы.

Ответы [ 3 ]

4 голосов
/ 03 сентября 2011

Вот простой пример, показывающий один из многих способов сделать это. Я обычно использую систему Джона Ресига .

function Animal(name) {
    this.name = name;
}

Animal.prototype.eat = function() {
    alert(this.name + " is eating");
};

Animal.prototype.speak = function() {
    alert("Hi my name is " + this.name);
};


function Cow(name) {
    this.name = name;
}
Cow.prototype = new Animal();

Cow.prototype.speak = function() {
    alert("Moooo");
};



var a = new Animal("John");
a.eat();
a.speak();

var c = new Cow("Mary");
c.eat();
c.speak();

http://jsfiddle.net/Xeon06/JK5vX/2/

1 голос
/ 03 сентября 2011

Вам нужно изучить прототип объектов, однако у вас не будет традиционных подклассов и наследования.

Я рекомендую вам ознакомиться с Javascript Garden для краткого объяснения: http://bonsaiden.github.com/JavaScript-Garden/#object. В Eloquent JavaScript есть более подробная глава по ООП в JS: http://eloquentjavascript.net/chapter8.html

0 голосов
/ 03 сентября 2011

Javascript не имеет классов, и его наследование прототипа может быть немного странным.

Тем не менее, скрипт Coffee делает все правильно и генерирует тонну кода скаффолда JS, который вы никогда не захотите написать самостоятельно.чтобы заставить его работать.

class Foo
  word: -> 'foo'
  say: -> alert word()

class Bar extends Foo
  word: -> 'bar'

bar = new Bar()
bar.say()

Что компилируется в этот шарик из JS: https://gist.github.com/1189853


Кроме того, Джон в отставке написал простую стратегию класса, которая может вам понравиться.http://ejohn.org/blog/simple-javascript-inheritance/

Оказывается, вы можете легко эмулировать семантику на основе классов в прототипном языке, но не наоборот.

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