【发布时间】:2012-07-16 00:23:21
【问题描述】:
在我的应用程序中,当我将数据传递给不同的对象时,我不确定我是否在复制数据。举个例子看看下面的代码:
var DataStore = function(data) {
this.data = data; // <-- typeof data === 'object'
}
var Controller = function() {
var dataStore = new DataStore({foo: 'bar'});
var plugin = new Plugin(dataStore.data);
}
var Plugin = function(data) {
this.data = data;
}
var app = new Controller();
当我创建插件时,它会从 dataStore 传递数据属性。然后将其分配给插件内部的一个属性。请记住,传递的数据是一个对象,我的问题是,这是在内存中创建两个变量还是插件中的数据属性引用了 DataStore 对象中的属性?
如果它在分配后没有保留引用,我如何将 DataStore 传递给插件并在本地保留对它的引用?或者我是否需要将 DataStore 作为全局变量保留在我的应用程序范围内并从插件全局引用它?
【问题讨论】:
-
AFAIK JavaScript 对象总是引用
-
@AlvinWong 不完全是。像 JavaScript 这样的 ECMAScript 实现中的对象只能通过引用访问,而对象引用是值(可以赋值)。其他编程语言中已知的按引用调用不存在,它是始终按值调用。这与例如在 Java 中相同。
标签: javascript pass-by-reference javascript-objects