If we want to add invisible methods to the Object, we can use Symbol Method to make methods invisible.
Version
ECMAScript 2015
Normal Method
let obj = {
name: 'Sam',
age: 18,
toString: function () {
return `${this.name} is ${this.age}`
}
}
Object.keys (obj) // ?
Object.getOwnPropertyNames (obj) // ?
JSON.stringify (obj) // ?
for (let x in obj)
console.log (x)
obj.toString () // ?
obj
is an Object with toString
method, if we use Object.keys
, Object.getPropertyNames
, JSON.stringify
or for in
loop, we’ll also get toString
property.
If we want obj
to be a pure Object, we may not want to see method names as properties. That is, we want toString
to be invisible methods
.
Invisible Method
let toString = Symbol ()
let obj = {
name: 'Sam',
age: 18,
[toString]: function () {
return `${this.name} is ${this.age}`
}
}
Object.keys (obj) // ?
Object.getOwnPropertyNames (obj) // ?
JSON.stringify (obj) // ?
for (let x in obj)
console.log (x)
obj [toString] () // ?
Line 1
let toString = Symbol ()
Use Symbol as method name.
Line 6
[toString]: function () {
return `${this.name} is ${this.age}`
}
Use []
with Symbol to define a method.
Line 11
Object.keys (obj) // ?
Object.getOwnPropertyNames (obj) // ?
JSON.stringify (obj) // ?
for (let x in obj)
console.log (x)
Object.keys
, Object.getOwnPropertyNames
, JSON.stringify
and for of
loop will not show method names defined by Symbol. It looks like an invisible method.
Line 17
obj [toString] () // ?
We have to use []
to execute this invisible method.
Conclusion
- Since Symbol Method is invisible by
JSON.stringify
, we can useJSON.strigify
to serialize the Object to String and save it to the database