JS this的理解与运用

在函数执行的时候,this总是指向调用该函数的对象。
要判断this的指向,其实就是判断this所在的函数属于谁。

在《JavaScript语言精粹》这本书中,把this出现的场景分为4类,简单说就是:

1. 有对象 就指向调用对象

var myObject = {value:100};  
 myObject.getValue = function(){  
     console.log(this.value);//输出100  
     console.log(this);//输出 { value: 100, getValue: [Function] }  
 }  
 myObject.getValue();  
// getValue() 属于对象 myObject,并由 myOjbect 进行 . 调用,因此 this 指向对象 myObject。 

2.没调用对象就指向全局对象

var myObject = { value: 100 };  
myObject.getValue = function() {  
    var foo = function() {  
        console.log(this.value) // 输出 undefined  
        console.log(this); // 输出全局对象 global    
         //foo 函数虽然定义在 getValue 的函数体内,但实际上它既不属于 getValue 也不属于 myObject。  
        // foo 并没有被绑定在任何对象上,所以当调用时,它的 this 指针指向了全局对象 global。  
    };  
    foo();  
    return this.value; //这个this 在 getValue中,从而指向 myObject。  
};  
console.log(myObject.getValue()); // 输出 100 
  1. 用new构造就指向新对象
//js 中,我们通过 new 关键词来调用构造函数,此时 this 会绑定在该新对象上。  
var SomeClass = function() {  
    this.value = 100;  
}  
var myCreate = new SomeClass();  
console.log(myCreate.value); // 输出10
  1. 通过 apply 或 call 或 bind 来改变 this 的所指
// apply 和 call 调用以及 bind 绑定: 指向绑定的对象  
// apply() 方法接受两个参数第一个是函数运行的作用域, 另外一个是一个参数数组(arguments)。  
// call() 方法第一个参数的意义与 apply() 方法相同, 只是其他的参数需要一个个列举出来。  
// 简单来说, call 的方式更接近我们平时调用函数, 而 apply 需要我们传递 Array 形式的数组给它。 它们是可以互相转换的。  
//apply和call的功能是一样的,只是传入的参数列表形式不同。
//var a1 = add.apply(sub,[4,2]);  //sub调用add的方法
/*call的用法*/
//var a1 = add.call(sub,4,2);
var myObject = { value: 100 };  
var foo = function() {  
    console.log(this);  
};  
foo(); // 全局变量 global  
foo.apply(myObject); // { value: 100 }  
foo.call(myObject); // { value: 100 }  
var newFoo = foo.bind(myObject);  
newFoo(); // { value: 100 }</span>  
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 1,231评论 0 2
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 6,997评论 15 54
  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 首先,thi...
    许先生__阅读 647评论 0 4
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,915评论 0 5
  • 我知道自己的分量,我只做好自己就够了,其他的一律闭嘴不说,想让我说我也不会说的,因为没必要,跟我有什么关系啊
    大小丫丫的妈妈阅读 178评论 0 0

友情链接更多精彩内容