gpt4 book ai didi

javascript - 从子类调用父类(super class)函数的正确方法

转载 作者:IT王子 更新时间:2023-10-29 03:21:54 27 4
gpt4 key购买 nike

我有一个以“信息”作为实例变量的“父类(super class)”。 “父类(super class)”具有函数“printInfo()”。 “printInfo()”需要访问实例变量“info”。我想创建一个“子类”,它也有方法“printInfo()”。我想从“SubClass”的“printInfo()”调用“SuperClass”的printInfo()。

SuperClass = function()
{
this.info = "I am superclass";
console.log("SuperClass:");
};

SuperClass.prototype.printInfo = function(that)
{
console.log("printing from superclass printInfo");
console.log(that.info);
};

SubClass = function(){};

SubClass.prototype = new SuperClass();

SubClass.prototype.printInfo = function()
{
console.log("calling superclass");
this.constructor.prototype.printInfo(this);
console.log("called superclass");
};

var sc = new SubClass();
sc.printInfo();

您可以看到我将“that”作为参数传递给 printInfo。如果没有“that”参数,“info”将打印为“undefined”。如下例所示,当从“SubClass”的对象调用此函数时,“this.info”未定义。

SuperClass.prototype.printInfo = function()
{
console.log("printing from superclass printInfo");
console.log(this.info);
};

在 javascript 中覆盖和调用父类(super class)的方法,使函数能够访问类的实例变量的正确方法是什么?

最佳答案

你在搞乱 SubClass的原型(prototype)与 SuperClass的对象,在这一行

SubClass.prototype = new SuperClass();

child 的原型(prototype)应该依赖于 parent 的原型(prototype)。所以,你可以这样继承

SubClass.prototype = Object.create(SuperClass.prototype);

另外,像这样把构造函数改成实际的函数也是很正常的

SubClass.prototype.constructor = SubClass;

为了使您的实现通用,您可以使用 Object.getPrototypeOf , 以获取继承链中的父原型(prototype),然后调用 printInfo , 像这样

SubClass.prototype.printInfo = function() {
Object.getPrototypeOf(SubClass.prototype).printInfo(this);
};

因为,infoSubClass 中定义然而,它会打印 undefined .您可能还想像这样调用父构造函数

var SubClass = function() {
SuperClass.call(this);
};

注意:您是通过省略 var 创建全局变量SuperClass 之前的关键字和 SubClass .

关于javascript - 从子类调用父类(super class)函数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com