Javascript наследование не может использовать метод базового класса - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь использовать наследование в JavaScript

вот пример кода C #, чтобы показать, что я пытаюсь

public class animal
{
    public animal() { }

    public string move()
    {
        return "i'm moving";
    }
    public string bite()
    {
        return "just a nip!";
    }
}

public class snake : animal
{
    public snake() { }

    public string bite()
    {
        return "been poisoned!";
    }
}

используется как:

var a = new animal();
var s = new snake();

a.bite(); // just a nip
s.bite(); // been poisoned    

a.move(); // i'm moving
s.move(); // i'm moving

сейчас в JS У меня есть:

function animal() {
};

animal.prototype.move = function () {
    return "im moving";
};

animal.prototype.bite = function () {
    return "just a nip";
};

snake.prototype = new animal();
snake.prototype = snake;

function snake() {
}

snake.prototype.bite = function () {
    return "been poisoned";
};



var a = new animal();
var s = new snake();


alert(a.bite()); // just a nip
alert(s.bite()); // been poisoned

alert(a.move()); //i'm moving
alert(s.move()); // s.move is not a function

Должен ли я предоставить метод в каждом из подклассов и вызвать базовый метод? т.е. добавить метод перемещения в змею для вызова animal.move?

snake.prototype.move = function () {
    return animal.prototype.move.call(this);
}

1 Ответ

4 голосов
/ 24 февраля 2011

прямо сейчас вы устанавливаете прототип дважды.

snake.prototype = new animal();
snake.prototype = snake;

вторая строка должна быть

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