1. toStringTag
Symbol.toStringTag
是一个内置 symbol,它通常作为对象的属性键使用,对应的属性值应该为字符串类型,这个字符串用来表示该对象的自定义类型标签
- 通常只有内置的
Object.prototype.toString()
方法会去读取这个标签并把它包含在自己的返回值里。
console.log(Object.prototype.toString.call("foo"))
console.log(Object.prototype.toString.call([1, 2]))
console.log(Object.prototype.toString.call(3))
console.log(Object.prototype.toString.call(true))
console.log(Object.prototype.toString.call(undefined))
console.log(Object.prototype.toString.call(null))
let myExports = {}
Object.defineProperty(myExports, Symbol.toStringTag, { value: "Module" })
console.log(Object.prototype.toString.call(myExports))
2. defineProperty
- defineProperty 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
- obj 要在其上定义属性的对象。
- prop 要定义或修改的属性的名称。
- descriptor 将被定义或修改的属性描述符。
let obj = {}
var ageValue = 10
Object.defineProperty(obj, "age", {
get() {
return ageValue
},
set(newValue) {
ageValue = newValue
},
enumerable: true,
configurable: true,
})
console.log(obj.age)
obj.age = 20
console.log(obj.age)