【发布时间】:2015-11-20 15:17:24
【问题描述】:
这些代码来自http://eloquentjavascript.net/06_object.html 我的问题是关于“接口如何工作?”例如,为什么在第一部分中我们使用了 cell.minHeight(),而不仅仅是 cell?为什么我们需要 .minHeight() 以及它以后如何工作?作者没有解释接口是如何工作的:(
function rowHeights(rows) {
return rows.map(function(row) {
return row.reduce(function(max, cell) {
return Math.max(max, cell.minHeight());
}, 0);
});
}
function colWidths(rows) {
return rows[0].map(function(_, i) {
return rows.reduce(function(max, row) {
return Math.max(max, row[i].minWidth());
}, 0);
});
}
我还看到 draw(width, height) 和它接收的参数,但我不明白执行了什么代码?
function drawTable(rows) {
var heights = rowHeights(rows);
var widths = colWidths(rows);
function drawLine(blocks, lineNo) {
return blocks.map(function(block) {
return block[lineNo];
}).join(" ");
}
function drawRow(row, rowNum) {
var blocks = row.map(function(cell, colNum) {
return cell.draw(widths[colNum], heights[rowNum]);
});
return blocks[0].map(function(_, lineNo) {
return drawLine(blocks, lineNo);
}).join("\n");
}
return rows.map(drawRow).join("\n");
}
上面这段代码中提到的minHeight()和minWidth()之间是否有联系?
function UnderlinedCell(inner) {
this.inner = inner;
};
UnderlinedCell.prototype.minWidth = function() {
return this.inner.minWidth();
};
UnderlinedCell.prototype.minHeight = function() {
return this.inner.minHeight() + 1;
};
UnderlinedCell.prototype.draw = function(width, height) {
return this.inner.draw(width, height - 1)
.concat([repeat("-", width)]);
};
简单示例:
davey = {
name: "Davey"
}
john = {
name: "John"
}
say = function(){
alert("Hello, I'm " + this.name)
}
davey.sayHi = say
john.sayHi = say
davey.sayHi() // => Hello, I'm Davey
john.sayHi() // => Hello, I'm Jhon
意思是,在某个地方我们应该有函数 minHeight()。但是,据我了解,接口以其他方式工作,我不明白如何。
【问题讨论】:
-
你对这些代码有什么不明白的地方?你了解其中的哪些部分?
-
奇怪的是,这一切都在你提供的链接中得到了解释
-
@Bergi 对不起,我试着澄清一下。我的问题是关于“接口如何工作?”例如,为什么在第一部分中我们使用了 cell.minHeight(),而不仅仅是 cell?为什么我们需要 .minHeight() 以及它以后如何工作?作者没有解释接口是如何工作的:(
-
@Bergi 我了解所有代码,例外为什么我们需要 .minHeight()、.minWidth()、.draw(),以及如何在代码的不同部分连接接口?
-
“接口如何工作?” javascript没有接口。也许这就是你误解的来源。在您的示例中,它只是一个具有方法的对象。
标签: javascript interface