const obj = { fn1: () => console.log(this), fn2: function() {console.log(this)} } obj.fn1(); obj.fn2(); const x = new obj.fn1(); const y = new obj.fn2();

参考答案

在上面的代码中,obj 对象包含两个方法 fn1 和 fn2。fn1 使用箭头函数定义,而 fn2 使用普通函数定义。

对于箭头函数,它没有自己的 this 值,也就是说它会捕获上下文中的 this 值,因此 fn1 中的 this 指向的是全局对象 window(或者 undefined,如果运行环境是严格模式)。因此,当我们调用 obj.fn1() 时,输出结果为 window(或 undefined)。

对于普通函数,它的 this 值是在运行时动态绑定的。因此,当我们调用 obj.fn2() 时,输出结果为 obj 对象本身

接下来,代码中分别使用 new 运算符创建了 obj.fn1 和 obj.fn2 的实例 x 和 y。由于箭头函数没有自己的 this 值,所以尝试使用 new 运算符创建实例会导致 TypeError 错误。而对于普通函数,new 运算符可以正确地创建 实例,并且 this 值指向新创建的实例对象。因此,x 是一个空的对象,y 是一个包含 fn2 方法的对象。