я не знаю, как решить следующую проблему JavaScript:JavaScript Наследование с неожиданным поведением
function A() {
var numbers = [];
this.addNumber = function(number) {
numbers.push(number);
}
this.getNumbers = function() {
return numbers;
}
}
A.prototype.alertNumbers = function() {
var numbers = this.getNumbers();
var length = numbers.length;
var number;
var numbersString = "";
for (var i = 0; i < length; i++) {
number = numbers[i];
numbersString += " " + number;
}
alert(numbersString);
}
B.prototype = new A();
function B() {
this.addNumber(1);
this.addNumber(2);
}
var b = new B();
b.alertNumbers();
var otherB = new B();
otherB.alertNumbers();
Рабочий код здесь: http://jsfiddle.net/pFxse/
Я ожидаю, что otherB.alertNumbers(); также показывает «1 2», а не «1 2 1 2».
Благодаря
Это потому, что числа не на прототипе. Вы используете переменную экземпляра в A и переносите ее с новыми экземплярами B – megawac
Итак, в JavaScript нет реальных «частных» свойств? Является ли решение заменить var number на this.numbers = [] ;? –
У меня нет способа наследования с частными переменными. Вы можете добавить это в конструктор B к 'A.apply (this, arguments)' и я думаю, что ваш код будет работать – megawac