用于更改从另一个方法作为参数发送的属性值的JavaScript JS类方法
到目前为止,我对JavaScript的了解是,传递给函数的参数是按值传递的,但值本身是引用。让我们看一下以下示例:用于更改从另一个方法作为参数发送的属性值的JavaScript JS类方法,javascript,class,oop,methods,reference,Javascript,Class,Oop,Methods,Reference,到目前为止,我对JavaScript的了解是,传递给函数的参数是按值传递的,但值本身是引用。让我们看一下以下示例: 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 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
方法?当传入一个基元类型(如数字/字符串)时,该值是按值传入的,但当传入一个对象/数组/函数时,这是通过参考。您传入的是对象的属性,而不是对象本身
var myClass = (function(){
function myClass(){
this.x = 5;
}
myClass.prototype.changeX = function(prop, val){
prop.x = val;
}
myClass.prototype.changer = function(){
this.changeX(this, 10); //Pass the object, not the object property
}
return myClass;
})();
var myObj = new myClass();
console.log(myObj); //myClass {x: 5}
myObj.changer();
console.log(myObj); //myClass {x: 10}
按值:
- 空的
- 未定义
- 串
- 数
- 布尔值
- 反对
- 排列
- 作用
prop
成为函数上下文中变量的表示形式。它实际上没有设置为this.x
,您只是通过引用传递this.x
的值。原语通过值传递,而对象通过“引用副本”传递。这是可能的。现在这是有意义的。非常感谢。