这是我的代码的简化版本:
function TextBox () {
this.builddom = function () {
// Building the text dom
}
}
function ImageBox () {
this.builddom = function () {
// Building the image dom
}
}
function Box (type) {
var handler =
(type == 'text') TextBox :
(type == 'Image') ImageBox : null;
if (handler) (handler).call (this);
this.builddom = function () {
// Here I would like to call the correct builddom function for the type.
}
}
var textbox = new Box ('text');
textbox.builddom ();
如果Box.builddom不存在,则工作正常,将调用与特定类型关联的builddom函数。但是我需要在Box中做一些常规的事情,然后调用特定的builddom。如果将Box builddom命名为Box.dobuilddom,这也可以,但是会中断对Boxes的常规访问。
我认为可以通过一些巧妙的原型操作来完成这项工作,但是我找不到它。
最佳答案
也许最好避免原型设计,而使用组合物:
function TextBox(box) {
this.builddom = function() {
console.log('Building the text dom', box.props);
}
}
function ImageBox(box) {
this.builddom = function() {
console.log('Building the image dom', box.props);
}
}
function Box(props) {
this.props = props;
this.builddom = function() {
throw new Error('unsupported function');
}
}
var textbox = new TextBox(new Box({size:5}));
textbox.builddom();
关于javascript - JS函数以及抽象类和原型(prototype),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55299811/