,
我试图了解JavaScript中的一些概念。考虑以下代码:
function Person(name, age)
{
this.name = name || "no name";
this.age = age || "age not specified";
this.printStr = function()
{
console.log("< " + this.name + ", " + this.age + " >");
};
}
p = new Person("pranav", 26);
p.printStr = function()
{
console.log("this works. also ...." + this.name);
};
p.printStr();
我想从“ p”中“ printStr”函数的实现中调用Person类中“ printStr”的实现。
这样输出应为:
< pranav, 26 >
this works. also ....pranav
有任何想法吗? :)
最佳答案
现在无法设置代码的方式。当您将Person
作为构造函数调用时,最终为p
的对象将设置为this
。因此,当您在构造函数中定义printStr
时,p
将获得一个名为printStr
的属性。然后,当您分配第二个功能时,您将其覆盖。
两种选择:非答案是执行pablochan所做的-将内部答案称为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();