[js] this

原创 2016年08月31日 15:59:27

this
this是一个对象,指调用函数的那个对象

在不同的函数调用情况下,this值会指向不同的对象 this的绑定是调用决定的而非定义决定的
- 方法调用(The Method Invocation Pattern)

// 函数作为对象的一个属性(方法)被调用,this指向该对象
var obj = {
    func: function() {}
}
obj.func() // this == x
  • 函数调用(The Function Invacation Pattern)
// 直接作为函数调用,this指向全局变量(window)
function a() {}
a(); // this == window
  • 构造器调用(The Constructor Invocation Pattern)
// 函数作为构造器,this指向新对象
var NewObj = function() {}
var Obj = new NewObj(); // this == Obj
  • apply调用(The Apply Invocation Pattern)或call调用
function a() {}
a.apply(obj, arguments);
a.apply(obj, arg1, arg2); // this == obj

因为不同的调用方式,this值可能会意外改变

// professiona js for web developers p183
var name = 'Window';
var obj = {
    name: 'Object',
    getN: function() {
        return this.name;
    }
}
var c = null;

obj.getN(); // Object 方法调用
(obj.getN)(); // Object 指向调用对象,obj
(c=obj.getN)(); // Window 赋值
(obj.getN=obj.getN)(); // Window 同上

闭包中的this
闭包中的this指向全局变量(window)

var name = 'window';
var func = function () {
  var name = 'func';
  return function () {
    return this.name;
  }
}
func()(); // window
var f = new func(); // 写法不规范,因为有return所以返回的还是闭包函数,但是在func调用的内部this并不指向window
f(); // window

map
map函数可以传递this到函数中,若不传递默认会是window。在使用lambda表达式时表现不太一样。

var obj = {
  name: 'obj',
  array: [1],
  doSth: function () {
    this.array.map(function (item) {
      console.log(this);
    })
  },
  doSth1: function () {
    this.array.map(function (item) {
      console.log(this);
    },this);
  },
  doSth2: function () {
    this.array.map(p=>console.log(this));
  }
}
obj.doSth(); // window
obj.doSth1(); // obj
obj.doSth2(); // obj

lambda的this是词法作用域的this值,且是在定义时候的词法作用域

js中的this

  • 2017年05月20日 23:10
  • 60KB
  • 下载

彻底弄懂js中的this指向

js中的this指向十分重要,了解js中this指向是每一个学习js的人必学的知识点,今天没事,正好总结了js中this的常见用法,喜欢的可以看看: 全局环境中this指向window。 有以下几种...

JS with和this的用法

1、with 语句 为一个或一组语句指定默认对象。 用法:with () ; with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用: x = Math.c...

你不知道的JS-读书笔记(三)--this和对象原型

this 绑定规则默认绑定严格模式下绑定到undefined,否则绑定到全局对象function foo () { console.log(this.a); } var a = 2; foo();...
  • SirM2z
  • SirM2z
  • 2017年11月23日 14:57
  • 67

如何理解JS中的this指向问题

如何理解JS中的this指向问题this中的最终指向的是那个调用它的函数(一定要记住这句话,但是这句话仍然有问题,下文会做解释) this在函数式编程和面向对象编程的过程中,能帮助简化我们的代码,...

js中对this关键字的理解

this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在**函数内部使用**。 比如, 理解this指代什么的关键点在与: 看这个this指的是局部对象还是全局...

JS-箭头函数中的this的指向

一直对于ES6中箭头函数在使用的时候有些疑虑,其中一项就是this的指向问题。跟之前我所熟悉掌握的函数内部this的指向是有些地方不同的,但是在箭头函数中this到底指向谁,我模模糊糊的。所以为了搞清...

js函数中this是全局变量还是当前对象

问题:在工作日历项目Web前端实现时,有两个小功能模块,一方面想自我要求必须面向对象的方式实现,另一方面此功能模块没有相同的模式,不需要用类多次实例化,因此创建一个单例是最好的选择。单例的js实现有多...

JS中的this变量的使用介绍

在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,在本文将为大家详细介绍下JavaScript中this的使用,感兴趣的朋友可以参考下。 JavaScript中...
  • zgrkaka
  • zgrkaka
  • 2015年12月28日 11:29
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[js] this
举报原因:
原因补充:

(最多只允许输入30个字)