javascript - 在 JavaScript 中将对象引用作为函数参数传递

标签 javascript oop prototype

这里我有一个简单的代码来理解Object.create()是如何工作的。这里我有一个通用对象用作原型(prototype),它是 prototypeObjnewObj 是一个其原型(prototype)设置为 prototypeObj 的对象。这里我有另一个名为 session 的对象,它有一个名为 anotherObj 的属性,并且 anotherObjnewObj 具有相同的原型(prototype)。但是,向位于 anotherObj 原型(prototype)中的名为 foo 的属性添加新值也会影响 newObj 。为什么我会遇到这种行为?

代码:

var prototypeObj = {
  foo: [],
  addItemToFoo: function(add) {
    this.foo.push(add);
  }
}

function create(fooVal) {
  var myProto = Object.create(prototypeObj);
  myProto.foo = fooVal;
  return myProto;
}

var newObj = create([1, 2]); // initialized with [1,2]

session = {
  anotherObj: create(newObj.foo) // initialized with [1,2]
}

session.anotherObj.addItemToFoo(6); // pushed 6 to session.anotherObj.foo

console.log("newObj.foo is " + newObj.foo); // newObj also get 6 pushed to its foo property

console.log("anotherObj.foo is " + session.anotherObj.foo);

最佳答案

foo 是一个数组,它通过引用工作。

anotherObj: create(newObj.foo)

您正在此处复制引用,因此您的旧对象和新对象都将具有相同的数组引用来插入元素。如果您想要不同的数组引用,您应该首先像这样 create( newObj.foo.slice())

https://jsfiddle.net/x8ftnh82/

关于javascript - 在 JavaScript 中将对象引用作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544294/

相关文章:

javascript - 使用 $.ajax 和 C# 的 JSON 格式

javascript - 以 Angular 将文本转换为html格式

node.js - 如何在node js的js页面创建两个类?

javascript - 当原型(prototype)设计时,是否可以将方法的结果分配给属性?

javascript - 在数组原型(prototype)中循环

extjs - 如何在 ExtJS4 中为单例添加方法?

javascript - 使用 JavaScript 进行计算

javascript - 从嵌套元素获取 value() 的选择器性能

java - 自动刷新jcombobox

java - 具有外部类和内部类的数组