封装保护函数

承接上篇 本篇将分装保护函数

直接上代码

!(function (){
 //1.第一步   先备份一份tostring方法
  const $toString=Function.prototype.toString
  const symbol=Symbol()

  //.3.改写函数
  const mytoString=function (){
    //首先先判断 调用这个tostring 方法是不是一个 函数 如果是一个函数 那么就返回 这个函数的 symbol属性 如果没有symbol 属性 ,那么就调用原生 保存的$toString方法
    return typeof this ==="function" && this[symbol] || $toString.call(this)
  }
  set_native=function (func,key,val){
    Object.defineProperty(func,key,{
      enumerable:false,
      configurable:true,
      writable:true,
      value:val

    })
  }



  //2.第二部然后再将该方法删除 //把他删除以后就要进行对他改写 对方法的改写
  delete Function.prototype.toString;

  //4. 我们已经改写了tostring方法 但是我们没有在原型链上添加该属性
  set_native(Function.prototype,"toString",mytoString)
  set_native(Function.prototype.toString,"toString","function toString() { [native code] }")
  globalThis.set_Native=function (func,funcname){//方法的总入口
    set_native(func,symbol,`function ${funcname || func.name || ""}() { [native code] }`)

  }

})()
add=function (a,b){
return a+b
}
set_Native(add,"add")
console.log(add.toString())
console.log(Function.prototype.toString.call(add))

//运行结果function add() { [native code] }
//function add() { [native code] }

对本节内容有疑点的同学请在评论区 提出问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值