javascript - 默认情况下向对象添加属性

标签 javascript

我想向对象添加 Symbol 属性以进行比较。

方法如下:

let _sym = Symbol('sym');

let a = {};
a[_sym] = Symbol('_');

let b = {};
b[_sym] = Symbol('_');

console.log(a[_sym] === b[_sym]); // false

ab 都是对象。所以,我可以写:

let _sym = Symbol('sym');

Object.prototype[_sym] = Symbol('_');

Object.Equals = function (x, y) {
    return x[_sym] === y[_sym];
};

let a = {};
let b = {};

console.log(Object.Equals(a, b)); // true

但是结果改变了。

这里出了什么问题?

最佳答案

在第一种情况下,您为每个对象分配一个新的符号实例

在第二个中,使用原型(prototype)每个对象共享相同的属性,因此它们是相等的

为了比较,此代码将等于第二种情况(但仅适用于这两个对象):

let _sym = Symbol('sym');
let val = Symbol('_');

let a = {};
a[_sym] = val;

let b = {};
b[_sym] = val;

console.log(a[_sym] === b[_sym]); // true

关于javascript - 默认情况下向对象添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755668/

相关文章:

javascript - 如何将 svg 按钮变成下载按钮?

javascript - 如何从左下角删除 MapBox Logo ?

javascript - 对象原型(prototype)方法与值

javascript - 如何在单个 html 文件中构建 Angular 应用程序,并将所有脚本内联?

javascript - 如何使用javascript将字符串编码到Windows 1256中

javascript - jQuery 中如何判断哪个元素被点击?

javascript - 通过单击更改div的高度

javascript - 在 asp.net web 应用程序中单击启用了 onserverclick 的 html 按钮时停止提交表单

javascript - 使用 JQuery 从 JSON 文件返回数组?

javascript - Angular 路由通配符可能/解决方法?