zoukankan      html  css  js  c++  java
  • call , apply的this指向实现原理并自己实现封装

    实现this指向原理
    var value = 'value' var obj = { value: 'obj' } function func() { console.log(this.value) } func() // obj func.call(obj) // obj obj.func = func // 相当于obj变成了 obj = { value: 'obj', func: function func() {console.log(this.value)}} --创建后记得删除 obj.func() // obj 相当于调用obj内的func函数

    实现this指向并传参原理

    // 将newCall赋到Function的父对象上
         Function.prototype.newCall = function () {
              var ctx = arguments[0] || window // 判断是否传了一个对象进来,如果有将this指向这个对象
              ctx.fn = this
              var args = []
              for(var i = 1; i<arguments.length; i++) {
                args.push('arguments[' + i + ']')
              }
              // args = ['arguments[i]','arguments[2]'].join(',')
              // eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。缺点是会改变作用域
              var result = eval('ctx.fn(' + args.join(',') + ')') 
              delete ctx.fn // 删除在ctx对象内创建的fn函数
              return result
            }
  • 相关阅读:
    DataTable.AcceptChanges方法有何用处
    中山西路620号 的人才服务中心搬到 梅园路77号去了
    Congos
    ps -aux返回超过100%
    to_date如何处理毫秒?
    SNMP_802.1
    交换机
    Oracle字符编码
    CRON
    交换机
  • 原文地址:https://www.cnblogs.com/PasserByOne/p/11957093.html
Copyright © 2011-2022 走看看