黑马程序员技术交流社区

标题: 关于javaScript内thi的指向问题 [打印本页]

作者: xjc    时间: 2019-9-12 12:46
标题: 关于javaScript内thi的指向问题
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绑定 > 显式绑定 >隐式绑定 >默认绑定




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2