第九课 this

一、this基本概念

this是Javascript语言的一个关键字。在JavaScript中,this是动态绑定,或称为运行期绑定的。在不同的情况下,this指向各不相同。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

1.全局范围内

当在全部范围内使用 this,它将会指向全局对象,在浏览器中,window 就是该全局对象。

2.函数调用

this指向全局对象,即windows

var name = 'Jeepeng';
function showName() {
console.log(this.name);
}
showName();

3.对象方法调用

在对象方法调用中this指向对象

var person = {
name: 'Jeepeng',
showName: function() {
console.log(this.name);
}
};
person.showName();

4.构造函数调用

在构造函数内部,this指向新创建的对象。

function Person(name) {
this.name = name;
}
var person = new Person('Jeepeng');
console.log(person.name);
var person1 = Person(‘Lily’);
// 函数调用,this指向windows

JavaScript 中的构造函数很特殊,如果不使用 new 调用,则和普通函数一样。作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。如果调用正确,this 绑定到新创建的对象上。

二、this可改变(重点)

1.使用apply或call调用

call和apply的作用是改变函数执行时的上下文,即改变函数运行时的this指向。二者的作用完全一样,区别只在于这两个函数接受的参数形式不同。

var person = {
name: 'Jeepeng',
showName: function() {
console.log(this.name);
}
};
var newPerson = {name: 'Lily'};
person.showName.call(newPerson);
function foo(a, b, c) {}

var bar = {};
foo.apply(bar, [1, 2, 3]);
// 数组将会被扩展,如下所示
foo.call(bar, 1, 2, 3);
// 传递到foo的参数是:a = 1, b = 2, c = 3

当使用 Function.prototype 上的 call 或者 apply 方法时,函数内的 this 将会被 显式设置为函数调用的第一个参数。

2.bind

bind与call很相似,不过bind的返回值是函数

var person = {
name: 'Jeepeng',
setName: function (name) {
this.name = name;
},
showName: function() {
console.log(this.name);
(function() {
this.setName('Lily');
}.bind(this))();
}
};
person.showName();

3.箭头函数

箭头函数并不绑定 this,arguments,super(ES6),抑或 new.target(ES6)。所有涉及它们的引用,都会沿袭向上查找外层作用域链的方案来处理。

随机推荐

  1. shell bash ksh

    shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行.     ...

  2. Android课程---环境配置很重要

  3. Graph | Eulerian path

    In graph theory, a Eulerian trail (or Eulerian path) is a trail in a graph which visits every edge e ...

  4. Portable Operating System Interface for uni-X

    https://kb.iu.edu/d/agjv Short for "Portable Operating System Interface for uni-X", POSIX ...

  5. JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览 【转】

    原文地址:http://blog.csdn.net/hills/article/details/40896357 JBoss和Tomcat版本.及Servlet.JSP规范版本对应一览 JBossAS ...

  6. J-LINK V8固件烧录指导

    1 J-LINK V8固件烧录指导 J-LINK 是使用过程中,如果内部固件意外损坏或丢失,请参考下面操作步骤说明,重新烧录JLINK固件. 1.1 安装固件烧录软件 请ATMEL官方网址下载AT91 ...

  7. CSS之cssText

    更改元素样式 <div style="width:100px;height:100px;text-align:center;line-height:100px;"> T ...

  8. [转][Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法

     转自:http://blog.csdn.net/qiujuer/article/details/39754517?utm_source=tuicool [Android][Android Studi ...

  9. partition-list

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  10. [开源]基于STM32的录音播放装置

    这是帮一个同学做毕设做的,基本要求如下(有些指标看看就好,实际当然不需要,哈哈): (1)放大器1的增益为46dB,放大器2的增益为40dB,增益均可调:(2)带通滤波器:通带为300Hz-3.4kH ...