我有一个对二维数组的批量操作。它将对数组中的每个元素调用一个给定的方法“func”:
function forEachMatrixElement(matrix: Complex[][], func: Function): Complex[][] {
let matrixResult: Complex[][] = new Array(countRows(matrix)).fill(false).map(() => new Array(countCols(matrix)).fill(false)); // Creates a result 2D-Matrix
for (let row = 0; row < countRows(matrix); row++) {
for (let col = 0; col < countCols(matrix); col++) {
matrixResult[row][col] = func.call(matrix[row][col]); // Call the given method
}
}
return matrixResult;
}
我有两个函数要委托给这个方法:下面的代码不需要额外的参数,运行良好:
export function conjugateMatrix(matrix: Complex[][]): Complex[][] {
return forEachMatrixElement(matrix, Complex.prototype.conjugate);
}
这个方法需要一个额外的参数(一个标量),但我不知道如何将这个参数添加到原型的方法引用中:
export function multiplyMatrixScalar(matrix: Complex[][], scalar: Complex): Complex[][] {
return forEachMatrixElement(matrix, Complex.prototype.mul); // TODO Call with scalar
}
3条答案
按热度按时间ttisahbt1#
进入
prototype
并使用call()
来操作this
的值通常是个坏主意。相反,
forEachMatrixElement
应该简单地接受一个接受Complex
示例的函数,调用者可以决定该函数做什么以及如何应用它的参数。例如:
现在,调用它的函数可以简单地为:
参见Playground
dbf7pr2w2#
您可以在
multiplyMatrixScalar
中创建一个新函数吗?类似于:
bvk5enib3#
MDN
Function.call()
可以接受其他参数作为参数。因此第一个参数将始终是this
绑定,第二个及以后的参数都是参数。想知道这是否能解决您的问题?因此,您的代码将如下所示
和