寫個call

Function.prototype.myCall = function(context){
    context = context || window; // 沒傳或者傳null,就指向window
    context.fn = this;// 獲取到調用的方法
    
    var args = [];
    for(var i = 1;i < arguments.length; i++){ //注意i從1開始,因爲第一個參數是this指向傳參
        args.push('arguments['+ i +']');//push進去的是字符串
    }
    
    var result = eval('context.fn('+args+')');//調用fn方法
    delete context.fn;//刪除屬性fn
    return result;
}

注意點:1 如果context 傳null 則取window

              2 被調用的方法賦值給屬性fn,調用完刪掉

              3 fn參數構造,利用eval的特性構造成字符串

參考:https://github.com/mqyqingfeng/Blog/issues/11

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