我是C/Python
家伙,转移到Javascript'最近。
基本上,我在函数中接收一个对象(名为context
)作为参数。调用函数的定义对我来说是隐藏的。现在我需要在type
中添加一个字段(context
)。当我直接向上下文添加type
时,它并未反映上下文中的更改。但是,当我尝试修改“上下文”现有字段之一的值时,会反映出此更改。
然后我再创建一个对象(new_obj
)并复制' context'在' new_object'中,然后尝试在' new_object'中添加该字段,但不成功。所以从这个行为来看,我猜这个值没有复制,但参考是。
所以最后我需要在new_obj
中逐字段复制,然后添加新字段'输入'。此外,如果我创建一个本地对象,则会添加新字段并修改对象结构。
到目前为止一切顺利。但我想知道'背景'的实施情况。对象在后台调用函数中。我的意思是,如果有一些' const'在这里输入东西(如在C中,(随机思想:P)),然后在它应用的级别,即只有添加新字段或改变现有字段值的限制。需要对这个问题有所了解。
答案 0 :(得分:2)
但我想知道后台调用函数中'context'对象的实现。我的意思是如果这里有一些'const'类型的东西(如在C中,(随机思想:P)),那么它在什么级别应用它,即只有添加新字段或改变现有字段值的限制。需要对这个问题有所了解。
部分取决于对象是主机提供的对象(例如,来自浏览器或类似对象),还是真正的JavaScript对象。
主机提供的对象几乎可以做任何想做的事情。 : - )
真正的JavaScript对象可以通过Object.seal
“密封”。这会阻止向其添加新属性,但不会阻止对现有属性的更改 - 与context
的描述完全匹配。这是一个例子:
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)