【问题标题】:JavaScript: Object Construct with object parameter [duplicate]JavaScript:带有对象参数的对象构造函数[重复]
【发布时间】:2018-05-09 01:39:02
【问题描述】:

我见过一些类似下面的代码:

var thing=Object(stuff);    //  stuff is an object

stuff 是一个对象。

(我在 Mozilla 的网站上看到了这种代码,位于 Object.assign 的 polyfill 中)。

Mozilla 的文档没有具体说明参数是对象时的含义。

据我所知,新对象是对原始对象的引用。我想如果你简单地写,你会得到同样的结果:

var thing=stuff;    //  stuff is an object

两者有什么区别?

编辑

我需要说吗?这不是关于Object.assign 的问题。这是一个关于使用Object构造函数的问题。

【问题讨论】:

  • 如果stuff 是一个对象,它确实没有什么区别。关键是stuff 并不总是一个对象。

标签: javascript object constructor


【解决方案1】:

Object.assign 的 polyfill 允许我们一次合并多个对象。 您关于创建新对象的观点是正确的,但存在不同的用例。

假设我们有 3 个对象,我们想要合并它们:

const a = { 'key1': 'value1' };
const b = { 'key2': 'value2', 'key3': 'this will get replaced' };
const c = { 'key3': 'value3' };

// Using Object.assign
const abc = Object.assign(a, b, c);
// abc will have the value {key1: "value1", key2: "value2", key3: "value3"}

【讨论】:

  • 如果你使用的是 es5,那么它会给你 const 的语法错误。将它们更改为 var for es5。没有语法错误。
  • 立即尝试。对不起,逗号。
  • @BrijeshBhakta 我认为这不能解决问题。我知道 Object.assign 做了什么:我只是提到 polyfill 是我看到代码的地方。问题是:使用带有对象参数的Object 构造函数的目的是什么?顺便说一句,如果您的对象 a 是常量,我认为您可能会遇到一些问题; Object.assign 应该改变目标对象。
  • 是的,它应该改变目标对象,但它不会对 const 产生任何错误,因为我们仍然可以修改对象,即使它是一个 const。就像我们没有重新分配 const 变量,而只是向它添加其他属性。
  • 我没有意识到你可以使用常量目标而不会出错。谢谢。
【解决方案2】:

字面量和 Object() 的区别 -

Object 构造函数为给定值创建一个对象包装器。 如果值为 null 或未定义,它将创建并返回一个空 对象,否则,它将返回对应的类型的对象 到给定的值。如果值已经是一个对象,它将返回 价值。

在非构造函数上下文中调用时,Object 的行为相同 到新对象()。 - from MDN

如果您使用 Object,您可以插入任何值并获取新对象,但如果您使用 object 作为 Object 的参数 - 您将获得指向该对象的链接。 如果 stuff 是对象,var thing=Object(stuff); 和 var thing=stuff; 是等价的,否则如果 stuf 例如是数字:

var thing=Object(stuff);---对象;

var thing=stuff;---号码;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2018-02-27
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多