界面在JavaScript中是如何工作的?

界面在JavaScript中是如何工作的?,javascript,interface,Javascript,Interface,这些代码来自 我的问题是关于“接口如何工作?”例如,为什么在第一部分中我们使用cell.minHeight(),而不仅仅是cell?为什么需要.minHeight()以及它以后是如何工作的?作者没有解释接口是如何工作的:( 函数行高(行){ 返回rows.map(函数(行){ 返回行.reduce(函数(最大值,单元格){ 返回Math.max(max,cell.minHeight()); }, 0); }); } 函数列宽(行){ 返回行[0]。映射(函数(\ui,i){ 返回行。减少(函数

这些代码来自 我的问题是关于“接口如何工作?”例如,为什么在第一部分中我们使用cell.minHeight(),而不仅仅是cell?为什么需要.minHeight()以及它以后是如何工作的?作者没有解释接口是如何工作的:(

函数行高(行){
返回rows.map(函数(行){
返回行.reduce(函数(最大值,单元格){
返回Math.max(max,cell.minHeight());
}, 0);
});
}
函数列宽(行){
返回行[0]。映射(函数(\ui,i){
返回行。减少(函数(最大,行){
返回Math.max(max,行[i].minWidth());
}, 0);
});
}
接口是如何工作的

a是一个约定。这个约定说明了一类对象的外观,包括它应该有什么方法,这些方法应该有什么签名,以及它们应该做什么

JavaScript没有作为语言元素的接口(如Java),它们是纯约定的。在您的例子中,单元格对象的约定仅在文本中定义:

这是接口:

  • minHeight()
  • minWidth()
    返回一个数字,指示此单元格的最小宽度(以字符为单位)
  • draw(width,height)
    返回一个长度-高度数组,该数组包含一系列字符串,每个字符串的宽度为个字符。此 表示单元格的内容
正如作者所解释的:

布局程序将通过 定义良好的接口。这样,程序所使用的单元格类型 支持不是预先固定的。我们可以在以后添加新的单元格样式,以便 例如,表格标题的带下划线的单元格以及它们是否支持 接口,它们将只工作,而不需要更改 布局程序

因此,您的
drawTable
函数希望获得这样的单元格对象数组。那么让我们来玩一个游戏:单元格还是无单元格

{}
空对象,无方法:无单元格

draw
方法:无单元格

TextCell.prototye
继承方法,这些方法按预期执行:cell

draw
方法不接受
width
height
参数,并且始终返回空数组:无单元格

RTextCell.prototye
TextCell.prototye
继承方法,这些方法按预期执行:cell

具有所需的方法,并且这些方法的行为符合预期:cell


关于这些代码,你不了解什么?你了解其中的哪些部分?奇怪的是,这些都在你的链接中解释过了provided@Bergi对不起,我想澄清一下。我的问题是关于“接口如何工作?”例如,为什么在第一部分中我们使用cell.minHeight(),而不仅仅是cell?为什么我们需要.minHeight())后来它是如何工作的?作者没有解释接口是如何工作的:(@Bergi我理解所有代码,除了我们为什么需要.minHeight(),.minWidth(),.draw(),以及接口在代码的不同部分是如何连接的?“接口是如何工作的?”javascript没有接口。也许这就是你产生误解的原因。在你的例子中,它只是一个有方法的对象。
{ minHeight: function() { return 3; },
  minWidth: function() { return 3; } }
new TextCell("Hi")
{ minHeight: function() { return 3; },
  minWidth: function() { return 3; },
  draw: function() { return []; } }
new RTextCell("Hi")
{ minHeight: function() { return 3; },
  minWidth: function() { return 3; },
  draw: function(w, h) { 
      var t = new Array(w-1).join("-");
      return return [","+t+"."].concat(new TextCell("").draw(w-2, h-2).map(function(l) {
          return "|"+l+"|";
      }), ["`"+t+"´"]);
  } }