es6-symbol之知名符号

本文介绍了ES6中的知名符号,如Symbol.hasInstance、Symbol.isConcatSpreadable、Symbol.toPrimitive和Symbol.toStringTag,揭示它们如何影响构造函数的instanceof判定、数组concat的行为、类型转换及Object.prototype.toString的返回值。通过这些知名符号,开发者可以深入参与JavaScript的底层实现。
摘要由CSDN通过智能技术生成

知名符号(公共、具名)是一些具有特殊含义的共享符号,通过Symbol的静态属性得到
ES6延续了ES5的思想:减少魔法,暴露内部实现!
因此ES6用知名符号暴露了某些场景的内部实现。

  1. 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](
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值