我试图了解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();

10-06 08:07