javascript - 为什么可以在不引用 'this' 的情况下操作对象属性

标签 javascript oop

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

鉴于我们有

var _queries = [];

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

Query.prototype.add = function add(query) {
  _queries.push(query);
};

其中 add 操作 _queries,而不是 this.queries

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

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 被操纵了。我不明白为什么会这样。

最佳答案

那是因为 javascript 将数组视为引用。

这行代码

 _queries = this.queries = queries;

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

如果你把它改成这样:

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

然后它们将各自指向数组的不同副本。

(slice 是克隆数组的 javascript 方法)

关于javascript - 为什么可以在不引用 'this' 的情况下操作对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184926/

相关文章:

php - 将查询变量发送到 php 函数的输入

javascript - 从 Rails Assets 管道中清除缓存

Javascript正则表达式可选字符

oop - typescript 父类正在调用派生函数

PHP 推荐从类实例发起数据库连接的方法

javascript - 有什么好例子可以说明OOP和JavaScript程序编程之间的区别?

python - 如何将父类方法的内容添加到子类方法中

javascript - 使用自定义局部变量从 javascript 渲染部分

javascript - 无法在 Express 中呈现 swig 模板

php - OOP (PHP) - 强制重写方法根据父方法调用