默认情况下将属性添加到对象

时间:2017-06-26 08:27:39

标签: 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




但结果发生了变化。

这里有什么问题?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

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

答案 1 :(得分:0)

例如:

var a = {};
var b = {};

不同的对象

a === b // false

相同的基础原型

a.toString === b.toString // true