Я пытаюсь применить прототипное наследование к функции в Javascript.Это все довольно просто и даже описано в лемме javascript Википедии .Это работает, если мои свойства - простые типы javascript:
function Person() {
this.age = 0;
this.location = {
x: 0,
y: 0,
absolute: false
};
};
function Employee() {};
Employee.prototype = new Person();
Employee.prototype.celebrate = function () {
this.age++;
}
var pete = new Employee();
pete.age = 5;
pete.celebrate();
var bob = new Employee();
bob.celebrate();
console.log("bob is " + bob.age + " pete is " + pete.age);
При Employee.prototype = new Person();
все свойства Person и (прототип) методы наследуются Employee, что является фундаментальным для наследования.
Thisработает как положено: bob is 1 pete is 6
Теперь я начинаю играть с положением Пита (после празднования)
pete.celebrate();
pete.location.absolute=true;
Отображение bob.location.absolute показывает: true
, чтопротиворечит интуитивно (я не трогал местоположение Боба, поэтому я ожидаю, что его начальное значение будет объявлено в Person
) и разрушит мое решение.
В моем первоначальном понимании это должно было быть ложным.Я понимаю, что мне, вероятно, следует клонировать объект местоположения от первоначального персонажа, но я не уверен, где и как это сделать.А если есть, может быть, лучшие методы наследования?