簡體   English   中英

默認情況下向對象添加屬性

[英]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 

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 

但是結果改變了。

怎么了

在第一種情況下,您為每個對象分配一個新的符號實例

在第二種方法中,使用原型每個對象共享相同的屬性,因此它們相等

進行比較,此代碼將等於第二種情況(但僅對於這兩個對象):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM