js高級進階——手動實現apply()函數

    // 首先看下apply()
    var obj = {
      name: 'Nicholas S.Zakas',
      age: 41,
      from: 'America',
      introduce: function (name, from) {
        console.log('hello, everyone, i am ' + name, 'i am from ' + from)
      }
    }

    var obj2 = {}

    obj.introduce.apply(obj2, ['Evan You', 'china']) // hello, everyone, i am Evan You i am from china

    Function.prototype._apply = function (context = window, arr) {
      var result
      context.fn = this
      if (!arr) { // 考慮無參數時
        context.fn()
      } else {
        var args = []
        for (var i = 0; i < arr.length; i++) {
          args.push('arr[' + i + ']')
        }
        result = eval('context.fn(' + args + ')')
      }
      delete context.fn
      return result
    }

    obj.introduce._apply(obj2, ['Evan You', 'china']) // hello, everyone, i am Evan You i am from china

    // ECMAScript6的實現
    Function.prototype._es6apply = function (context = window, args) {
      let result
      context.fn = this
      if (!args) {
        context.fn()
      } else {
        result = context.fn(...args)
        delete context.fn
      }
      return result
    }

    obj.introduce._es6apply(obj2, ['Evan You', 'china']) // hello, everyone, i am Evan You i am from china

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章