【问题标题】:Not able to use a method inside a class无法在类中使用方法
【发布时间】:2021-11-03 21:33:38
【问题描述】:

我正在尝试制作一个矩阵类。当我将 cof() 函数用作方法并显示此错误时,它不起作用。
practice:47 Uncaught TypeError: Cannot read property 'cof' of undefined。

但是当我在 det() 方法中使用它作为函数时,它运行良好。谁能解释为什么会这样?

class Matrix{
 
 constructor(matrix){
     this.matrix = matrix
 }   
 
 cof(matrix = this.matrix, i, j) {
    let cofMat = matrix.map(row =>
      row.filter((_, colIndex) => j !== colIndex)
    )
    cofMat.splice(cofMat[i],1)
    return cofMat
  }
     
 det(matrix = this.matrix) {
  let validInput = true;

  //input validation
  let columnLength = matrix.length;
  matrix.forEach((row) =>
    row.length === columnLength ? (validInput = true) : (validInput = false)
  );
  if (!validInput) return "Input a valid n*n matrix";

  // determining the matrix using 1st row.

  // This function is not working properly as a method

  function cof(matrix, i, j) {
    let cofMat = matrix.map(row =>
      row.filter((_, colIndex) => j !== colIndex)
    )
    cofMat.splice(cofMat[i],1)
    return cofMat
  }

  function recursiveDeterminantMatrix(matrix) {
    if (matrix.length === 2 && matrix[0].length === 2) {
      let result = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
      return result;
    } else {
      let answer = 0;
      for(let i =0; i< matrix.length; i++) {
        let cofactor =
          (-1) ** i *
          matrix[0][i] *
          recursiveDeterminantMatrix(this.cof(matrix, 0, i));
        answer += cofactor;
      };
      return answer;
    }
  }

  return recursiveDeterminantMatrix(matrix);
 }  
}

let matrix = [[1,2,3],[4,5,6],[7,8,8]];

let mat = new Matrix(matrix).det()

【问题讨论】:

    标签: javascript class recursion matrix typeerror


    【解决方案1】:

    recursiveDeterminantMatrix 函数执行时,this 不会计算类的实例,因为它不是方法,只是普通函数。

    您可以将类的实例保存在 self 变量中,以便在内部函数中正确使用。

    det(matrix = this.matrix) {
     const self = this;
    
     // ...
    
     function recursiveDeterminantMatrix(matrix) {
       if (matrix.length === 2 && matrix[0].length === 2) {
         let result = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
         return result;
       } else {
         let answer = 0;
         for(let i =0; i< matrix.length; i++) {
           let cofactor =
             (-1) ** i *
             matrix[0][i] *
             recursiveDeterminantMatrix(self.cof(matrix, 0, i));
           answer += cofactor;
         };
         return answer;
       }
     }
    
     return recursiveDeterminantMatrix(matrix);
    } 
    

    有关this关键字的更多信息,请查看MDN Docs

    【讨论】:

      【解决方案2】:

      您可以为此使用绑定。

      recursiveDeterminantMatrix(this.cof(matrix, 0, i).bind(this));
      

      【讨论】:

      • @sadat-saim 如果这对您有帮助,您可以通过单击复选标记将答案标记为已接受:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多