A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xjc

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© xjc 初级黑马   /  2019-9-12 12:46  /  1056 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

this的指向不是在编写时确定的,而是在执行时确定的,同时,this不同的指向在于遵循了一定的规则。

首先,在默认情况下,this是指向全局对象的,比如在浏览器就是指向window。

name = "Bale";

function sayName () {
    console.log(this.name);
};

sayName(); //"Bale"
其次,如果函数被调用的位置存在上下文对象时,那么函数是被隐式绑定的。

function f() {
    console.log( this.name );
}

var obj = {
    name: "Messi",
    f: f
};

obj.f(); //被调用的位置恰好被对象obj拥有,因此结果是Messi
再次,显示改变this指向,常见的方法就是call、apply、bind

以bind为例:

function f() {
    console.log( this.name );
}
var obj = {
    name: "Messi",
};

var obj1 = {
     name: "Bale"
};

f.bind(obj)(); //Messi ,由于bind将obj绑定到f函数上后返回一个新函数,因此需要再在后面加上括号进行执行,这是bind与apply和call的区别

最后,也是优先级最高的绑定 new 绑定。

用 new 调用一个构造函数,会创建一个新对象, 在创造这个新对象的过程中,新对象会自动绑定到Person对象的this上,那么 this 自然就指向这个新对象。

function Person(name) {
  this.name = name;
  console.log(name);
}

var person1 = new Person('Messi'); //Messi
绑定优先级: new绑定 > 显式绑定 >隐式绑定 >默认绑定

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马