JS中this的四种调用方法

一.函数调用

// this 指代全局对象(window)
function test(){
   this.x = 1;
   alert(this.x);
}
test(); // 1

二.方法调用

// 作为对象方法调用,this 指代上级对象
function test(){
  alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1

三.构造函数模式

// this指向new创建的新对象
function test(){
  this.x = 1;
}
var o = new test();
alert(o.x); // 1
// 运行结果为1。为了说明这时this不是全局对象,看下面的代码:
var x = 2;
function test(){
  this.x = 1;
}
var o = new test();
alert(x); //2

四.apply/call调用(函数上下文)

上下文模式中this的指向和前三种模式不一样,它的this指向可以改变,而前三种模式是固定。
apply和call第一个参数:表示使用那个对象来调用函数;
apply第二个参数:是一个数组或伪数组,数组的值做为函数的参数被传入;
call第二个参数是:是基本数据类型(number string boolean);

var x = 0;
function test(){
 	alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0  指向window
//apply()的参数为空时,默认调用全局对象。如果把最后一行代码修改为:
o.m.apply(o); //1  指向o对象

通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是十分常用的。

你可能感兴趣的:(JS中this的四种调用方法)