javaScript中的this

2017-02-10  本文已影响22人  小m_up

this是JavaScript中的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如:

function  a(){
     this.x  = 1;
}

随着函数使用场合的不同,this的值会发生变化,所以要分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象。
this的使用一般有以下四种情况:

普通函数调用

普通函数调用属于全局性调用,this就代表了全局变量。
比如:

const x = 1;
function a(){
     console.log(this.x);
}
a(); // 输出为1

此时的this指的就是全局变量global,最后一句其实就等价于

window.a();//输出为1
对象的方法调用

在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,此时该函数被称为该对象的方法,在使用这种调用方式时,this 被自然绑定到该对象。

const a = { 
 x : 1,
 y : function(x) { 
     console.log(this.x);
     } 
 }; 
 a.y(0); // 输出1,this绑定到当前对象,即a对象

在这段代码中,function(x){}这个函数就是a对象的一个方法,所以此时的this就是a对象。

构造函数调用

JavaScript 支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript 并没有类的概念,而是使用原型继承方式。相应的,JavaScript 中的构造函数也很特殊,如果不使用 new 调用,则和普通函数一样。一般构造函数以大写字母开头,如果调用正确,this 绑定到新创建的对象上。

function a(){
  this.x = 1;
}
const b = new a();
console.log(b.x); //输出1
apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。所以this指的就是这第一个参数。

const x = 0;
const a = { 
 x : 1,
 y : function() { 
     console.log(this.x);
     } 
 }; 
a.y.apply(); // 输出0

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
若将给apply()传入参数,即

a.y.apply(a); // 输出1

则表明此时的this指的是对象a

上一篇 下一篇

猜你喜欢

热点阅读