为什么你可以操作对象属性而不引用'this'

时间:2015-01-28 04:58:54

标签: javascript oop

我想了解以下原因:

鉴于我们已经

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被操纵,就好像barthis.queries添加了_queries。我不直观为什么这样做。

1 个答案:

答案 0 :(得分:1)

这是因为javascript将数组视为参考。

这行代码

 _queries = this.queries = queries;

将使_queriesthis.queries成为指向同一内存数组的指针。

如果您将其更改为:

 _queries = queries.slice();
 this.queries = queries.slice();

然后他们会指向数组的不同副本。

slice是克隆数组的javascript方法)