Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不引用';这';_Javascript_Oop - Fatal编程技术网

Javascript 为什么不引用';这';

Javascript 为什么不引用';这';,javascript,oop,Javascript,Oop,我试图理解为什么以下方法有效: 既然我们有 var _queries = []; function Query(queries) { _queries = this.queries = queries; } Query.prototype.add = function add(query) { _queries.push(query); }; 其中,add操作\u查询,而不是this.querys 当我们创建一个新的查询对象时 var query = new Query(['foo

我试图理解为什么以下方法有效:

既然我们有

var _queries = [];

function Query(queries) {
  _queries = this.queries = queries;
}

Query.prototype.add = function add(query) {
  _queries.push(query);
};
其中,
add
操作
\u查询
,而不是
this.querys

当我们创建一个新的查询对象时

var query = new Query(['foo']);
query;
//=> Query { queries: ['foo'], add: function... }
query.add('bar');
query;
//=> Query { queries: ['foo', 'bar'], add: function... }

这就好像
add
添加到
此.querys
,即使
\u querys
被操纵。这对我来说并不直观。

这是因为javascript将数组视为引用

这行代码

 _queries = this.queries = queries;
将使
\u查询
this.querys
是指向内存数组中相同的指针

如果将其更改为:

 _queries = queries.slice();
 this.queries = queries.slice();
然后它们将分别指向数组的不同副本


slice
是克隆数组的javascript方法)

因为您使用了全局变量。这是一个非常糟糕的主意,不能用于多个实例。这是我决定不包含的一个更大的函数的范围