const obj = { str: "object", fn: () => { console.log(this.str); }, fn2: function () { console.log(this.str); return { str: "newObj", fn: () => { console.log(this.str); } } }, }; obj.fn(); obj.fn2(); </script>
时间: 2024-02-10 11:23:01 浏览: 67
这段代码定义了一个名为 obj 的常量,它是一个对象。对象包含三个属性:str,fn 和 fn2。str 属性是一个字符串,fn 属性是一个箭头函数,fn2 属性是一个普通函数。
在调用 obj.fn() 时,箭头函数的 this 指向的是全局对象,因为箭头函数的 this 始终指向定义时所在的作用域。因此,控制台会输出 undefined。
在调用 obj.fn2() 时,普通函数的 this 指向的是调用该函数的对象,也就是 obj 对象。因此,控制台会输出 "object"。此外,fn2 函数返回了一个包含 str 和 fn 两个属性的新对象,其中 fn 是一个箭头函数,它的 this 仍然指向全局对象,因此控制台会输出 undefined。
相关问题
<script> str = "window"; const obj = { str: "object", fn: () => { console.log(this.str); }, fn2: function () { console.log(this.str); return { str: "newObj", fn: () => { console.log(this.str); } } }, }; obj.fn(); obj.fn2(); </script>
答:代码的输出结果如下:
- "window"
- "object"
- "window"
在全局作用域中,变量str被声明为"window"。在obj对象中,有两个方法:fn和fn2。fn是一个箭头函数,箭头函数的this指向其父级作用域(即全局作用域),所以输出"window"。fn2是一个普通函数,函数内部的this指向obj对象本身,所以输出"object"。fn2返回了一个新的对象,其内部的箭头函数的this仍然指向其父级作用域(即全局作用域),所以输出"window"。
阅读全文