这是我的代码的简化版本:

  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/

10-13 05:56