我想了解以下原因:
鉴于我们已经
var _queries = [];
function Query(queries) {
_queries = this.queries = queries;
}
Query.prototype.add = function add(query) {
_queries.push(query);
};
add
操纵_queries
而不是this.queries
。
当我们创建一个新的Query对象时,
var query = new Query(['foo']);
query;
//=> Query { queries: ['foo'], add: function... }
query.add('bar');
query;
//=> Query { queries: ['foo', 'bar'], add: function... }
即使add
被操纵,就好像bar
向this.queries
添加了_queries
。我不直观为什么这样做。
答案 0 :(得分:1)
这是因为javascript将数组视为参考。
这行代码
_queries = this.queries = queries;
将使_queries
和this.queries
成为指向同一内存数组的指针。
如果您将其更改为:
_queries = queries.slice();
this.queries = queries.slice();
然后他们会指向数组的不同副本。
(slice
是克隆数组的javascript方法)