Javascript 语法变量赋值

Javascript 语法变量赋值,javascript,Javascript,让我们拥有以下功能: function transformMatrix(a, b, c, d, e, f) { this.data = [a, c, e, b, d, f, 0, 0, 1]; } transformMatrix.prototype.inverse = function() { //.. this.data = newdata; return this.data; } 及 现在,当我打电话时 m1.inverse(); var m2 = m1.inverse

让我们拥有以下功能:

function transformMatrix(a, b, c, d, e, f)
{
  this.data = [a, c, e, b, d, f, 0, 0, 1];
}

transformMatrix.prototype.inverse = function()
{
  //..
  this.data = newdata;
  return this.data;
}

现在,当我打电话时

m1.inverse();
var m2 = m1.inverse();
变量
m1
已更改

但是当我打电话的时候

m1.inverse();
var m2 = m1.inverse();
变量
m1
已更改,并将更改后的变量复制到变量
m2
。太好了

有没有一种方法可以在不改变原始变量的情况下,将
逆的结果分配给新变量

我可以这样做:

var m2 = m1;
m2.inverse();
但我想知道,如果没有事先的安排,是否还有其他方法,比如

var m2 = {m1}.inverse(); // incorrect syntax
这不会改变m1

请注意,
反向
功能不应更改


任何帮助都将不胜感激。谢谢…

您需要从
m1
创建一个新对象,并在该对象上调用
inverse
函数,以避免修改原始对象。理想情况下,您的
transformMatrix
构造函数将能够从传递给它的矩阵创建一个新矩阵。这样做的构造函数如下所示:

function transformMatrix(a, b, c, d, e, f) {
    if(!(a instanceof transformMatrix)) { // if a, the first variable passed in, is NOT a matrix
        this.data = [a, c, e, b, d, f, 0, 0, 1];
    } else { // otherwise it is a matrix; we need to create a new matrix from its data
        this.data = [
            a.data[0],
            a.data[1],
            a.data[2],
            a.data[3],
            a.data[4],
            a.data[5],
            0,
            0,
            1,
        ]
    }
}
var m2 = new transformMatrix(m1).reverse(); // note the new keyword, because you're creating a new object
var m2 = JSON.parse(JSON.stringify(m1)).reverse();
transformMatrix.prototype.inverse = function() {
    var newMatrix = JSON.parse(JSON.stringify(this));
    //..
    newMatrix.data = newdata;
    return newMatrix.data;
}
现在,如果将现有矩阵传递到
transformMatrix
,它将根据传递的矩阵数据创建一个新矩阵。修改新矩阵不会影响旧矩阵。新语法如下所示:

function transformMatrix(a, b, c, d, e, f) {
    if(!(a instanceof transformMatrix)) { // if a, the first variable passed in, is NOT a matrix
        this.data = [a, c, e, b, d, f, 0, 0, 1];
    } else { // otherwise it is a matrix; we need to create a new matrix from its data
        this.data = [
            a.data[0],
            a.data[1],
            a.data[2],
            a.data[3],
            a.data[4],
            a.data[5],
            0,
            0,
            1,
        ]
    }
}
var m2 = new transformMatrix(m1).reverse(); // note the new keyword, because you're creating a new object
var m2 = JSON.parse(JSON.stringify(m1)).reverse();
transformMatrix.prototype.inverse = function() {
    var newMatrix = JSON.parse(JSON.stringify(this));
    //..
    newMatrix.data = newdata;
    return newMatrix.data;
}
m2
现在将是
m1
的反向版本,
m1
将不受影响

另一种选择:JSON黑客 您还有另一个选择,它有点粗糙,但不需要修改原始的
transformMatrix
构造函数:使用JSON hack复制原始矩阵,然后对复制的对象调用
reverse()
。它看起来是这样的:

function transformMatrix(a, b, c, d, e, f) {
    if(!(a instanceof transformMatrix)) { // if a, the first variable passed in, is NOT a matrix
        this.data = [a, c, e, b, d, f, 0, 0, 1];
    } else { // otherwise it is a matrix; we need to create a new matrix from its data
        this.data = [
            a.data[0],
            a.data[1],
            a.data[2],
            a.data[3],
            a.data[4],
            a.data[5],
            0,
            0,
            1,
        ]
    }
}
var m2 = new transformMatrix(m1).reverse(); // note the new keyword, because you're creating a new object
var m2 = JSON.parse(JSON.stringify(m1)).reverse();
transformMatrix.prototype.inverse = function() {
    var newMatrix = JSON.parse(JSON.stringify(this));
    //..
    newMatrix.data = newdata;
    return newMatrix.data;
}
您甚至可以在
reverse()
函数中包含此黑客行为,结果如下所示:

function transformMatrix(a, b, c, d, e, f) {
    if(!(a instanceof transformMatrix)) { // if a, the first variable passed in, is NOT a matrix
        this.data = [a, c, e, b, d, f, 0, 0, 1];
    } else { // otherwise it is a matrix; we need to create a new matrix from its data
        this.data = [
            a.data[0],
            a.data[1],
            a.data[2],
            a.data[3],
            a.data[4],
            a.data[5],
            0,
            0,
            1,
        ]
    }
}
var m2 = new transformMatrix(m1).reverse(); // note the new keyword, because you're creating a new object
var m2 = JSON.parse(JSON.stringify(m1)).reverse();
transformMatrix.prototype.inverse = function() {
    var newMatrix = JSON.parse(JSON.stringify(this));
    //..
    newMatrix.data = newdata;
    return newMatrix.data;
}

谢谢赋值
this.data=[a[0],a[1],…,0,0,1]
没有
。data
可以吗?这不应该是
this.data=[a.data[0],a.data[1],…,0,0,1]
。?还有一个修正:
如果(!(transformMatrix的实例))