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的实例))