gpt4 book ai didi

javascript - 使用 Javascript 可选调用函数 "class"

转载 作者:行者123 更新时间:2023-12-03 12:00:39 24 4
gpt4 key购买 nike

我有以下 Node 模块:

var _ = require('lodash');

function Config(configType, configDir) {
this.configType = configType;
this.configDir = configDir;
};

Config.prototype.read = function() { // read file to buffer };
Config.prototype.modify = function() { // modify buffer };
Config.prototype.write = function() { this.modify(); // now write };

var base = _.curry(Config);
module.exports.A = base('A');
module.exports.B = base('B');
module.exports.C = base('C');

// In some other file
var config = require('config');
var a = new config.A('a/dir');
var b = new config.B('b/dir');
var c = new config.C('c/dir');

问题是,对于 ConfigC,我实际上并不想调用修改方法。我考虑过在基于 configType 的 write 函数中做一个条件,但理想情况下我希望 ConfigC 只是“知道”要做什么,或者通过覆盖 write 函数或其他一些我不知道的 javascript-ism 。

有人知道解决这个问题的优雅方法吗?

最佳答案

使用子类。我们不会在子类中减去修改行为,而是让基类进行修改,然后在子类中添加该行为。

// Add the below to the definition of Config in the question
Config.prototype.write = function() { /* do not modify */ };

// Define subclass which adds modify behavior
function ConfigModify(configType, configDir) {
Config.apply(this, arguments);
}
ConfigModify.prototype = Object.create(Config.prototype,
{constructor: {value: ConfigModify}}); // thanks Felix
ConfigModify.prototype.write = function() { this.modify(); /* now write */ };

module.exports.A = _.curry(ConfigModify)('A');
module.exports.B = _.curry(ConfigModify)('B');
module.exports.C = _.curry(Config)('C');

根据一位世界著名计算机科学家的说法,“if 语句只是一个实现不佳的子类。尤其是在测试 bool 标志时。”

关于javascript - 使用 Javascript 可选调用函数 "class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25433063/

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