知名符号(公共、具名)是一些具有特殊含义的共享符号,通过Symbol的静态属性得到
ES6延续了ES5的思想:减少魔法,暴露内部实现!
因此ES6用知名符号暴露了某些场景的内部实现。
- Symbol.hasInstance
该符号用于定义构造函数的静态成员,它将影响instanceof的判定
obj instanceof A
//等效于
A[Symbol.hasInstance](obj) //Function.prototype[Symbol.hasInstance]
例:
function A() {
}
const obj = new A();
console.log(obj instanceof A); //true
console.log(A[Symbol.hasInstance](obj));//true
这里有了Symbol.hasInstance这个静态属性,我们便可以参与instanceof的判定的内部实现,这次为了让它判断的时候返回false。
function A() {
}
Object.defineProperty(A, Symbol.hasInstance, {
//这里甚至可以写一些打印的语句,在执行instanceof判断的时候也是会打印到控制台的。
value: function(obj) {
return false;
}
})
const obj = new A();
console.log(obj instanceof A); //false
console.log(A[Symbol.hasInstance](