作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 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/
我是一名优秀的程序员,十分优秀!