ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于js的call、apply、bind,并重写

2021-08-21 14:33:28  阅读:117  来源: 互联网

标签:__ obj1 bind getName js call context let fn


let obj1 = {
      name: '123',
      getName: function () {
        return this.name
      }
    }

    let obj2 = {
      name: '456'
    }

    console.log(obj1.getName())  // 123
    console.log(obj1.getName.call(obj2)) // 456

    Function.prototype.myCall = function (context = window) {
      let args = Array.from(arguments).splice(1)
      if (typeof this !== 'function') return
      // 关键在于利用对象的特性,直接在将函数指向新的对象,并指向该函数
      !context.__fn__ && context.__fn__ = this
      let res = context.__fn__(...args)
      // 删除该对象上的属性
      delete context.__fn__

      return res
    }

    console.log(obj1.getName.myCall(obj2))  // 456

标签:__,obj1,bind,getName,js,call,context,let,fn
来源: https://www.cnblogs.com/bitingBeast/p/15169449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有