到目前爲止我對JavaScript的瞭解是,傳遞給函數的參數是按值傳遞的,但值本身是引用。讓我們來看看下面的例子:JavaScript JS類用於更改作爲參數從另一個方法發送的屬性值的方法
function change(obj){
obj.x = 10;
}
var myObj = {x: 5};
console.log(myObj); //Object {x: 5}
change(myObj);
console.log(myObj); //Object {x: 10}
比方說,我們有下面的類:
var myClass = (function(){
function myClass(){
this.x = 5;
}
myClass.prototype.changeX = function(val){
this.x = val;
}
return myClass;
})();
var myObj = new myClass();
console.log(myObj); //myClass {x: 5}
myObj.changeX(10);
console.log(myObj); //myClass {x: 10}
一切看起來都正常爲止。讓我們擴展我們的類:
var myClass = (function(){
function myClass(){
this.x = 5;
}
myClass.prototype.changeX = function(prop, val){
prop = val;
}
myClass.prototype.changer = function(){
this.changeX(this.x, 10);
}
return myClass;
})();
var myObj = new myClass();
console.log(myObj); //myClass {x: 5}
myObj.changer();
console.log(myObj); //myClass {x: 5}
那麼,爲什麼在最近的一個例子的myObj
的x
屬性沒有改變?如何修改最新示例的changer
方法,以便通過發送this.x
和要分配給它的值作爲參數來調用changeX
方法?
即'prop'變爲在功能的上下文變量的表示。它實際上並沒有設置爲'this.x',你只是通過引用傳遞'this.x'的值。基元通過值傳遞,而對象通過「引用副本」傳遞。這是一個可能的[重複](https://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference)。 –