[英]Adding a property to an object by default
我想將Symbol
屬性添加到對象以進行比較。
方法如下:
let _sym = Symbol('sym'); let a = {}; a[_sym] = Symbol('_'); let b = {}; b[_sym] = Symbol('_'); console.log(a[_sym] === b[_sym]); // false
a
和b
都是對象。 所以,我可以寫:
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
但是結果改變了。
怎么了
在第一種情況下,您為每個對象分配一個新的符號實例
在第二種方法中,使用原型每個對象共享相同的屬性,因此它們相等
進行比較,此代碼將等於第二種情況(但僅對於這兩個對象):
let _sym = Symbol('sym');
let val = Symbol('_');
let a = {};
a[_sym] = val;
let b = {};
b[_sym] = val;
console.log(a[_sym] === b[_sym]); // true
例如:
var a = {};
var b = {};
不同的對象
a === b // false
相同的基礎原型
a.toString === b.toString // true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.