То, как ваш код настроен сейчас, вы не можете сделать это. Когда вы вызываете Person
как конструктор, объект, который в итоге становится p
, получает значение this
Поэтому, когда вы определяете printStr
в конструкторе, p
получает атрибут с именем printStr
. Затем вы перезаписываете его, когда назначаете вторую функцию.
Два варианта: без ответа делать то, что сделал паблочан - нужно назвать внутреннюю oldPrintStr
. Другой вариант - использовать наследование прототипа:
function Person(name, age)
{
this.name = name || "no name";
this.age = age || "age not specified";
}
Person.prototype.printStr = function() {
console.log("< " + this.name + ", " + this.age + " >");
};
Тогда вы можете сделать это:
p = new Person("pranav", 26);
p.printStr = function()
{
Person.prototype.printStr.apply(this);
console.log("this works. also ...." + this.name);
};
p.printStr();