js this

在javascript中,this表示执行上下文,即指向一个对象的指针。

1.最高层的执行上下文是windows对象,在全局作用域中,变量与函数是windows对象的属性。直接调用一个函数fun(), 等价于window. func(),则函数func中的this指向的是 window对象。

(1)

var a = 1;

function A(){

    alert(this. a);

}

A();

输出1。

A()等价于windows.A(), 函数A在windows上下文中执行,this指向windows对象。a在全局作用域中定义并赋值,a属于windows对象的属性,输出1。

(2)

var a = 1;

var obj = {

    a : 2,

    A : function(){

        alert(a);

    }

}

var B = obj. A;

B();

输出为1。

B()等价于windows.B(), 函数B(即obj. A)的执行上下文是windows, this指向windows对象,因此输出为1。

2.除了最高层的windows的对象,js生成的对象也可构成一个执行上下文。

(1)

var a = 1;

var obj = {

    a : 2,

    A : function(){

        alert(this. a);

  }

obj.A();

输出2。

函数A执行上下文是obj, this指向obj对像。this.a = obj.a = 2。

(2)

var a = 1;

var obj = {

    a : 2,

    A : function(){

        alert(this.a);

     }

}

function B(){

    alert(this.a);

}

obj.C = B;

 

obj.C();

输出为2。

obj.C即B函数的执行上下文是obj,this指向obj。

B();

输出为1。

B函数的执行上下文是window对象,this指向window对象。

3.默认情况下,this指向上下文。此外,可以指定this的指向。

(1)通过new。执行new时,首先建一个空对象obj,再去执行类函数, 函数中的this指向新建的对象obj, 函数执行完后,obj被赋予一些属性。这个obj就是实例化的对象。

function Class(a,b){

  this.a = a;

  this.b = b;

}

var obj = new Class('a','b');

this指向实例化的obj对象。

(2)通过apply()方法或call()方法。

function Parent(c,d){

  this.c = c;

  this.d = d;

}

function Child(a,b,c,d){

  Parent.apply(this,[c,d]);//使Parent函数中的this指向Child函数中的this(即对象child),并执行Parent函数。

  this.a = a;

  this.b = b;

}

var child = new Parent('a','b','c','d');

alert(child.c);

输出c

 call方法与apply方法相同,call方法以单个参数传数据,apply方法以一个数组作为传数据的参数,上面的代码可改为Parent.call(this,c,d)。

原文地址:https://www.cnblogs.com/fe-huahai/p/5507901.html