ES6之知名符号
知名符号可以改变js内部一些方法的实现,做到以前无法做到的功能。下面是几个常见的知名方法。
- Symbol.hasInstance
- Symbol.isConcatSpreadable
- Symbol.toPrimitive
- Symbol.toStringTag
下面是一些具体的例子:
function A() { }
const obj = new A();
Object.defineProperty(A, Symbol.hasInstance, {
value: function () {
return false;
}
})
console.log(obj instanceof A)
console.log(A[Symbol.hasInstance](obj))
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]
arr1[Symbol.isConcatSpreadable] = true;
const obj1 = {
length: 2,
0: 1,
1: 2,
[Symbol.isConcatSpreadable]: true
}
console.log(arr1.concat(obj1))
class Type {
constructor(number) {
this.number = number
}
[Symbol.toPrimitive](type) {
console.log(type)
}
}
console.log(new Type(12) / 2)
class C {
[Symbol.toStringTag] = 'C'
}
const c = new C()
console.log(Object.prototype.toString.apply(c))