一道关于this指向的问题

题目如下:


var length = 10;

function fn() {

    console.log(this.length)

};

var obj = {

    length: 5, 

    method: function (fn) {

        fn();

        arguments[0]();

        fn.call(obj, 12);

    }

};

obj.method(fn, 1);

我的解读如下:


obj.method(fn, 1); 这一段其实是method作为obj的方法调用,this隐式绑定到obj上。执行的是


{

    // 此次调用的this指向obj,arguments为function () { console.log(this.length) }, 1

    fn();

    arguments[0]();

    fn.call(obj, 12);

}

这三条语句。


第一个fn是打印出this.length,以我的理解,this在调用时确定指向,在method函数内这里的this隐式绑定到obj上,结果是打印出5;

第二条语句其实还是fn,但是this绑定谁我不知道,所以结果我也不知道;

第三条语句的this绑定给obj,后面的12是fn的参数没有用,所以打印出5;


结果我的分析只有最后一个答案是正确的,求解惑。


米琪卡哇伊
浏览 618回答 3
3回答

胡说叔叔

第一个fn是作为函数来调用的,他的this为window第二个this是function(fn){}的arguments对象,具有arguments具有是具有length的伪数组,这是为什么是输出是2呢,是因为obj.metnod(fn,1) 你传入了2个参数.第三个是this 指向 obj

慕的地8271018

以前我刚学js的时候在慕课网上,老师就说this的问题。this就是函数作为方法被调用时,所处的对象。不知道理解有误没。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript