gpt4 book ai didi

javascript - 如何确定是否可以将新字段添加到预先存在的对象中?

转载 作者:行者123 更新时间:2023-12-01 03:19:32 25 4
gpt4 key购买 nike

我是一个 C/Python 人员,最近转向了“Javascript”。

基本上,我在函数中收到一个对象(名为context)作为参数。调用函数的定义对我来说是隐藏的。现在我需要向 context 添加一个字段(type)。当我直接将 type 添加到上下文时,它不会反射(reflect)“上下文”中的更改。但是,当我尝试修改“上下文”现有字段之一的值时,会反射(reflect)这一更改。

然后我创建了另一个对象(new_obj)并在“new_object”中复制“context”,然后尝试在“new_object”中添加该字段,但不成功。因此,从这种行为来看,我猜该值没有被复制,但引用被复制了。

所以最后我需要在 new_obj 中逐个字段复制,然后添加新字段“type”。另外,如果我创建本地对象,则会添加新字段并修改对象结构。

到目前为止一切顺利。但我想知道后台调用函数中“上下文”对象的实现。我的意思是,如果这里有一些“const”类型的东西(如在 C 中,(随机想法:P)),那么它应用在什么级别,即仅限制添加新字段或更改现有字段的值。需要对这个问题进行一些说明。

最佳答案

But I was wondering about the implementation of the 'context' object in background caller function. I mean if there is some 'const' type thing here(as in C, (Random thoughts :P)), then at what level it is applied i.e. there is only restriction of adding new fields or also of changing values of the existing fields. Needed some light over this issue.

这部分取决于该对象是主机提供的对象(例如,来自浏览器或类似对象),还是真正的 JavaScript 对象。

主机提供的对象几乎可以做任何它想做的事情。 :-)

真正的JavaScript对象可以通过Object.seal“密封” 。这会阻止向其中添加新属性,但不会阻止对现有属性进行更改 - 与您对上下文的描述完全匹配。这是一个例子:

var o = Object.seal({
answer: 0
});
console.log(o.answer); // 0
o.answer = 42;
console.log(o.answer); // 42
o.question = "Life, the Universe, and Everything";
console.log(o.question); // undefined

如果您使用 strict mode ,尝试在密封对象上创建属性是一个方便的错误:

"use strict";
var o = Object.seal({
answer: 0
});
console.log(o.answer); // 0
o.answer = 42;
console.log(o.answer); // 42
o.question = "Life, the Universe, and Everything"; // Throws error
console.log(o.question); // (we don't get here)

关于javascript - 如何确定是否可以将新字段添加到预先存在的对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45307703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com