javascript - 如何从替换的实现中调用类中的方法?

标签 javascript oop

海,

我试图理解 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。另一种选择是使用原型(prototype)继承:

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();

关于javascript - 如何从替换的实现中调用类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1858815/

相关文章:

javascript - 相同的按钮样式但不同的输出

javascript - 在javascript中获取动态生成元素的属性值(通过ajax)

python - 扩展方法时将局部变量保留在作用域内

javascript - 将 js var 作为属性传递到 jquery 操作中

javascript - 使用 Graphql 和 React,我无法从默认导出访问函数

java - Scala 中的类、对象、特征、密封特征

c# - 更好的 C# 扑克框架设计?

c# - 如果你想确保所有的方法和属性都被实现,你用什么

javascript - jQuery 中确认对话框的本地化

php - 创建 Php 函数以返回 css 类