gpt4 book ai didi

Javascript继承对象覆盖其他继承对象

转载 作者:行者123 更新时间:2023-11-30 16:04:05 25 4
gpt4 key购买 nike

有人可以解释一下让多个对象从父对象继承并拥有自己的原型(prototype)函数的正确方法是什么吗?我正在尝试在 nodeJS 中执行此操作。

我有这些文件。

解析器A_文件

var ParentParser = require('ParentParser_file');

module.exports = ParserA;
ParserA.prototype = Object.create(ParentParser.prototype);
ParserA.prototype.constructor = ParserA;
ParserA.prototype = ParentParser.prototype;

function ParserA(controller, file) {
ParentParser.call(this, controller, file);
this.controller.log('init --- INIT \'parser_A\' parser');
this.date_regex = /([0-9]{1,2})?([A-Z]{3})?([0-9]{2})? ?([0-9]{2}:[0-9]{2})/;
this.date_regex_numeric = /(([0-9]{1,2})([0-9]{2})([0-9]{2}))? ?([0-9]{2}:[0-9]{2})?/;
this.date_format = 'DDMMMYY HH:mm';
}

ParserA.prototype.startParse = function() {
console.log('Starting parse for A');
}

解析器B_文件

var ParentParser = require('ParentParser_file');

module.exports = ParserB;
ParserB.prototype = Object.create(ParentParser.prototype);
ParserB.prototype.constructor = ParserB;
ParserB.prototype = ParentParser.prototype;

function ParserB(controller, file) {
ParentParser.call(this, controller, file);
this.controller.log('init --- INIT \'parser_B\' parser');
this.date_regex = /([0-9]{1,2})?([A-Z]{3})?([0-9]{2})? ?([0-9]{2}:[0-9]{2})/;
this.date_regex_numeric = /(([0-9]{1,2})([0-9]{2})([0-9]{2}))? ?([0-9]{2}:[0-9]{2})?/;
this.date_format = 'DDMMMYY HH:mm';
}

ParserB.prototype.startParse = function() {
console.log('Starting parse for B');
}

ParentParser_file

ParentParser = function(controller, file) {

if (!controller) {
throw (new Error('Tried to create a Parser without a controller. Failing now'));
return;
}
if (!file ) {
throw (new Error('Tried to create a Parser without a file. Failing now'));
return;
}
this.controller = null;
this.file = null;

}

module.exports = ParentParser;

现在我在我的 Node 应用程序中需要它们

var ParserA = require('ParserA_file');
var ParserB = require('ParserB_file');

现在,当只加载一个解析器时没有问题,但是,将它们都加载到我的 Node 应用程序并启动解析器 A

var parser = new ParserA(this, file);
parser.startParse()

返回

init --- INIT 'parser_B' parser'

现在问题来了,为什么 ParserB 的函数 startParse 会覆盖 ParserA 的 startParse

最佳答案

那是因为它们指的是同一个原型(prototype)对象。

ParserA.prototype = ParentParser.prototype;
...
ParserB.prototype = ParentParser.prototype;
ParserA.prototype === ParserB.prototype; // true

删除这两行(无论如何都会覆盖它们上面的两行),你就可以开始了。

关于Javascript继承对象覆盖其他继承对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284959/

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