我正在创建一个矩阵类(用于React应用),其定义如下:
class Matrix extends Object {
constructor(r, c) {
super();
this.rows = new Array(r);
for (var i=0; i<r; i++) {
this.rows[i] = new Array(c);
}
this.assign((v,i,j) => (i===j)? 1:0); // ERROR HERE
}
assign(f) {
for (var i=0; i<this.rows.length; i++) {
for (var j=0; j<this.rows[i].length; j++) {
this.rows[i][j] = f(this.rows[i][j], i, j);
}
}
}
// and so on
这段代码在使用webpack编译时没有问题,但运行时会在chrome控制台上报错,提示_this.assign不是一个函数。
我可以通过以下方式解决:
constructor(r, c) {
super();
this.rows = new Array(r);
for (var i=0; i<r; i++) {
this.rows[i] = new Array(c);
}
this.assign = function(f) {
for (var i=0; i<r; i++) {
for (var j=0; j<r; j++) {
this.rows[i][j] = f(this.rows[i][j], i, j);
}
}
};
this.assign((v,i,j) => (i===j)? 1:0);
}
但这是错误的,对吗?我不应该在构造函数中定义对象的所有函数,对吗?在同一个文件中,我定义了像这样的React类:
class MatrixComponent extends React.Component { ... }
还有一些人能够在不在构造函数中定义函数的情况下调用它们。我错过了什么吗?