JavaScript中对象作为参数时是引用传递,这意味着在函数中操作传递进来的对象参数时,会直接修改原对象,而不是复制一份进行操作。下面是完整的攻略。
什么是引用传递?
引用传递是JavaScript中一种复杂数据类型(如对象、数组等)作为函数参数时的传递方式。传递的不是数据本身,而是对该数据的内存地址的引用。在函数内部可以通过这个地址对传递进来的数据进行修改。因为是修改原来的地址,所以函数外部的数据也会被修改。
什么情况下会用到对象参数引用传递?
当一个函数需要修改一个对象并返回修改后的结果时,也就是需要对传递进来的对象进行操作时,会使用对象参数引用传递。
示例说明
下面我们通过两个示例来详细讲解对象参数的引用传递。
示例1:对象作为参数传递
// 定义一个对象
var obj = { name: 'Tom', age: 20 };
// 定义一个函数,接受一个对象作为参数
function changeObj(obj) {
obj.name = 'Jerry';
obj.age = 18;
return obj;
}
// 调用函数并输出结果
console.log(changeObj(obj)); // { name: 'Jerry', age: 18 }
console.log(obj); // { name: 'Jerry', age: 18 }
分析:
这个示例中定义了一个对象obj
和一个函数changeObj
。函数changeObj
接受一个对象参数obj
,内部对该对象的name
和age
属性进行修改,最后返回修改后的对象。在调用函数后,console.log(changeObj(obj))
输出的是{ name: 'Jerry', age: 18 }
,说明函数内部对传递进来的对象进行了修改,而console.log(obj)
也输出了{ name: 'Jerry', age: 18 }
,说明函数内部的修改同时也影响了外部的对象。
示例2:调用对象的方法
// 定义一个对象
var obj = {
name: 'Tom',
age: 20,
sayName: function() {
console.log(this.name);
}
};
// 定义一个函数,接受一个对象作为参数
function changeObj(obj) {
obj.name = 'Jerry';
obj.age = 18;
return obj;
}
// 调用函数并输出结果
console.log(changeObj(obj)); // { name: 'Jerry', age: 18, sayName: [Function] }
obj.sayName(); // Jerry
分析:
这个示例中定义了一个对象obj
,它有一个sayName
方法,输出对象的name
属性。另外定义了一个函数changeObj
,内部对传递进来的对象进行修改并返回。在调用函数后,console.log(changeObj(obj))
输出的是{ name: 'Jerry', age: 18, sayName: [Function] }
,函数内部修改了对象的name
和age
属性。在调用obj.sayName()
时输出Jerry
,说明调用对象的方法时,修改对象属性的变化对方法调用也有影响。
通过以上两个示例可以明显的看出,JavaScript对象参数的引用传递是一种强大的机制,可以让我们方便地修改对象属性并快速执行方法。但是要格外小心,不要因为对一个对象参数引用传递而对原始对象进行了不必要的修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript对象参数的引用传递 - Python技术站