this的使用

什么是this?

this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。

var person = {
  name: '张三',
  describe: function () {
    return '姓名:'+ this.name;
  }
};

person.describe()
// "姓名:张三"

由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的,即this的指向是可变的。

var A = {
  name: '张三',
  describe: function () {
    return '姓名:'+ this.name;
  }
};

var B = {
  name: '李四'
};

B.describe = A.describe;
B.describe()
// "姓名:李四"
var A = {
  name: '张三',
  describe: function () {
    return '姓名:'+ this.name;
  }
};

var name = '李四';
var f = A.describe;
f() // "姓名:李四"

上面代码中,A.describe被赋值给变量f,内部的this就会指向f运行时所在的对象(本例是顶层对象)。

JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,this就是这个对象(环境)。但是 JavaScript 支持运行环境动态切换,也就是说,this的指向是动态的,没有办法事先确定到底指向哪个对象。如果一个函数在全局环境中运行,那么this就是指顶层对象(浏览器中为window对象)

function f() {
  return this;
}

f() === window // true

this的使用

(1)在全局环境使用this,它指的就是顶层对象window。
(2)构造函数中的this,指的是实例对象。

var Obj = function (p) {
  this.p = p;
};

Obj.prototype.m = function() {
  return this.p;
};
var o = new Obj('Hello World!');

o.p // "Hello World!"
o.m() // "Hello World!"

上面代码定义了一个构造函数Obj。由于this指向实例对象,所以在构造函数内部定义this.p,就相当于定义实例对象有一个p属性;然后m方法可以返回这个p属性。
(3)对象的方法
当 A 对象的方法被赋予 B 对象,该方法中的this就从指向 A 对象变成了指向 B 对象。所以要特别小心,将某个对象的方法赋值给另一个对象,会改变this的指向。

绑定 this 的方法

this的动态切换,固然为JavaScript创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把this固定下来,避免出现意想不到的情况。JavaScript提供了call、apply、bind这三个方法,来切换/固定this的指向。//具体使用方法,再另一文章中~~~~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,569评论 0 13
  • 160827 曼城的大日子,就是今天了。 因为要拍小视频,清早十点就和LULU赶去Liverpool Road,花...
    XxXxXxN阅读 110评论 1 1
  • 每日推荐: 每日一歌――车丽蔚《I Miss You》 每日一诗――唐·白居易《问刘十九》 绿蚁新醅酒, 红泥小火...
    萨拉芯雪阅读 358评论 0 1
  • 今年提子算算我自己吃了统共不超过两斤。成熟之后回去过两次,都是大伙要吃提子才请天假匆匆回去一趟。我喜欢吃...
    Vivi盈宝阅读 292评论 0 0

友情链接更多精彩内容