通过对象调用方法设置
使用对象来调用其内部的一个方法,该方法的 this 是指向对象本身的。
- 案例 1
答案:输出 jszhang。
我们要时刻牢记:谁调用的指向谁。这里是通过 myObj 进行的一个调用,所以此刻的 this 指向 myObj。而 myObj 里面存有 name: jszhang,所以输出 jszhang。
当然,我们要有自知之明:
- 案例 2
这时候它又变成 window 指向了,此刻 let foo = myObj.showThis 只是一个定义,真正执行是在 foo()。那么此刻 foo() 是咋搞的呢?window.foo() 啊!毋庸置疑输出 undefined。
- 案例 3
let myObj = { name: ‘jszhang’, showThis: function() { console.log(this.name); },}let foo = myObj.showThis;foo(); // 输出啥?
一般来说,这段代码输出应该是 undefined。
但是,这里需要注意的是,window.name 是当前 window 的名称,它是 window.open() 打开新网页这个方法的第二个参数的值。
所以这里输出的 window.name 是个空值 ”,或者当前存在的 window 的名称。
jszhang 通过一个例子带小伙伴们看看这个是怎么来的:
index.html
在新打开的网页中的控制台,输入 window.name,获取 jszhang 的网页。
结论:
- 在全局环境中调用一个函数,函数内部的 this 指向的是全局变量 window。
- 通过一个对象来调用其内部的一个方法,该方法的执行上下文中的 this 指向对象本身。