码迷,mamicode.com
首页 > 编程语言 > 详细

理解JavaScript中的this

时间:2016-05-13 23:24:37      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

一、正文

      函数内部有两个特殊对象:arguments和this。因为this是函数内部的对象,所以只能在函数内部中使用。

      所有的函数调用都是作为某个对象的方法来调用的,this指向的就是调用函数的对象。

      一共有四种情形:

      1、对于全局函数,this指向Global(全局对象),即this=window;

      2、作为某个对象的方法调用,this指向该对象;

      3、作为构造函数调用,this指向由构造函数生成的新对象;

      例如:

var name = ‘bison‘;
function people(){
    this.name =‘kidney‘;
}
people();
alert(name); // kidney
// 此时people只是一个普通函数,在全局环境中调用,因此this指向window,于是全局属性name被改成了kidney

var name = ‘bison‘;
function people(){
    this.name =‘kidney‘;
        this.changeName = function(){
        this.name = ‘kidney‘;
    }
}
var o = new people(); // 当用new生成对象后,people就成了构造函数,this指向新生成的对象o
alert(o.name); // kidney

o.changeName(); // 运行对象方法,如果this指向全局,则全局name被修改为kidney,如果this指向对象o,那么全局name仍为bison
alert(name); // bison,说明this确实指向的是对象o 

4、apply()和call()

      apply的意思是应用,apply()作为函数对象的方法,其作用就是改变函数的调用对象,将函数“应用”到某个对象,此时函数内部的this指向apply方法指定的对象(由参数指定,参数为空,表示全局对象)。call的作用和apply完全一样,只是参数设置上的区别。

二、小结

      由于this的易变特性,为了避免其指向的对象发生意外的改变,通常人们会提前将this储存到别的变量中。

三、解题

  解答this有关的js习题,关键就是看函数是被哪个对象调用的(或者说函数是作为哪个对象的方法调用的),搞清楚调用对象,也就明白了this的指向对象。

  我们来看《JavaScript高级程序设计》(第3版)P182的一道题,网上很多同类的题基本都是根据这道改编的。

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    };
  };
alert(object.getNameFunc()());

// 我们对最后一句进行分解
var a = object.getNameFunc(); // a就是function(){return this.name}
var b = a(); // 在全局环境下调用,this指向全局对象,所以this.name=‘The Window‘
alert(b);// The Window

 

理解JavaScript中的this

标签:

原文地址:http://www.cnblogs.com/kidney/p/5491386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!