Может кто-нибудь объяснить мне, почему это наследование в javascript не работает? - PullRequest
0 голосов
/ 20 июля 2010
<html>
<head>
<script>

function SuperClass()
{
    var self = this;
    self.someVariable = true;
}
function SubClass()
{
    var self = this;
    self.name = "Sub";
}
SubClass.prototype = SuperClass;

var sub = new SubClass();

alert("This is a sub class with name " + sub.name + " and variable " + sub.someVariable);

</script>
</head>
<body>
</body>
</html>

output:

This is a sub class with name Sub and variable undefined

Так почему же подкласс не имеет someVariable?Я думал, что в этом весь смысл прототипирования.

1 Ответ

2 голосов
/ 20 июля 2010

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

//...
SubClass.prototype = new SuperClass();
//..

Возможно, вы захотите восстановить свойство constructor объекта SubClass.prototype после указанной выше строки, потому что если вы этого не сделаете, экземпляры, созданные с помощью SubClass (например, sub в вашем примере), будутиметь унаследованное свойство constructor, неверно указывающее на SuperClass:

SubClass.prototype.constructor = SubClass;

Проверьте пример здесь .

Рекомендуемые статьи:

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