【问题标题】:Is it possible to overwrite an object after being passed? [duplicate]是否可以在传递后覆盖对象? [复制]
【发布时间】:2016-06-04 10:37:00
【问题描述】:

看下面的例子:

var foo = { bar : 0 };

function modify(obj)
{
    obj = {};
}

modify(foo);

console.log(foo);

我在全局范围内的第一个对象保持不变。因为函数替换的不是对象而是引用的副本。

所以我的问题很简单。有谁知道一种解决方法,或者目前是否有 ECMAScript 功能正在开发中,或者是否有尝试过让这成为可能?

谢谢。

【问题讨论】:

  • 您没有将 foo 作为函数的参数传递。顺便说一句,你不想以这种方式覆盖东西。了解无状态函数
  • 你用一个参数定义modify,但没有调用它。您的意思是用foo 调用它吗?
  • 不,这不是 JS 现在或将来的工作方式。
  • 是的,我做到了。改了

标签: javascript pass-by-reference


【解决方案1】:

您不能更改调用时使用的变量的绑定。但是由于您收到对同一对象的引用,因此您可以修改对象本身。所以你可以删除所有属性:

function modify(obj) {
  Object.keys(obj).forEach(function(k) {
    delete obj[k];
  });
}

var foo = { a: 3 };
console.log(foo);
modify(foo);
console.log(foo);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2017-03-11
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多