符号如何帮助避免js中对象的名称冲突



由于符号是唯一的标识符,它们可以帮助我们避免在对象中重写相同的名称属性。

就像假设一样,有一个名为user的对象,它在许多不同的程序中使用。

let user = {
name :  "ram",
id : 5,
};

现在,假设这个用户对象在另一个程序中使用(让我们称之为pro1(,如果我们想向它添加一个名为id的属性,我们将使用符号id,就像这样-

let id = Symbol();
user[id] = 2;

因此,在用户对象中不会重写以前的id属性。

但现在假设,

如果用户对象已经具有符号id属性,并且它在另一个尚未定义符号id的程序中使用,那么由于没有定义符号id,就会出现错误。

那么我的问题是,在JavaScript中,符号如何帮助避免对象中的命名冲突????

我真的无法理解它背后的概念。请澄清一下。

举个例子,一个应用程序有一些关于相册的数据,并用这些数据做的事情。(警告:接下来的一切都非常简单和做作(。

假设我们有一个模块;与朋友们分享我的音乐品味"以及";订购歌曲";并且这两个模块都希望将曲目标记为已处理,这样您就不会得到重复的副本,也不会多次向朋友大喊。

模块可能看起来像这样:

const processed = Symbol('processed');
function shareWithFriends(track) {
if (track[processed]) { return };
/* do suff */
track[processed] = true;
}
export default shareWithFriends;

然后你可以:

import shareWithFriends from './shareWithFriends.js';
import orderSong from './orderSong.js';
const song = { /* meta data */ };
shareWithFriends(song);
orderSong(song);

两个模块都可以修改元数据,而不会错误地读取其他模块处理的符号。

最新更新