在具体的实际应用中, this 的指向无法在函数定义时确定, 而是在函数执行的时候才确定的, 根据执行时的环境大致可以分为以下 3 种:
1, 当函数作为普通函数调用时, this 指向全局对象
2, 当函数作为对象的方法调用时, this 指向该对象
3, 当函数作为构造器调用时, this 指向新创建的对象
示例一:
- window.name = 'myname';
- function getName() {console.log(this.name);
- }
- getName(); // 输出 myname
示例二:
- var boy = {
- name: 'Bob',
- getName: function() {
- console.log(this.name);
- }
- }
- boy.getName(); // 输出 Bob
示例三:
- function Boy(name) {
- this.name = name;
- }
- var boy1 = new Boy('Bob');
- console.log(boy1.name); // 输出 Bob
对于示例三, 还有一种特殊情况, 就是当构造函数通过 "return" 返回的是一个对象的时候, 此次运算的最终结果返回的就是这个对象, 而不是新创建的对象, 因此 this 在这种情况下并没有什么用.
示例四:
- function Boy(name) {
- this.name = name;
- return { // 返回一个对象
- name: 'Jack'
- }
- }
- var boy1 = new Boy('Bob');
- console.log(boy1.name); // 输出 Jack
示例五:
- function Boy(name) {
- this.name = name;
- return 1; // 返回非对象
- }
- var boy1 = new Boy('Bob');
- console.log(boy1.name); // 输出 Bob
来源: https://www.cnblogs.com/blog-cxj2017522/p/8997800.html