ES6之知名符号

38 阅读1分钟

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))