JS this对象

2017-05-16  本文已影响0人  壬万er

this 是在函数执行的过程中自动创建的一个指向一个对象的内部指针。确切的说,this并不是一个对象,而是指向一个已经存在的对象的指针,也可以认为是this就是存储了某个对象的地址

this的指向不是固定的,会根据调用的不同,而指向不同的地方。

this的绑定可以分为四种:

1.默认绑定

2.隐式绑定

2.new 绑定

3.显示绑定

1、默认绑定

当我们直接调用一个函数的时候,这个函数作用的this就是默认绑定,
默认绑定在window中
注意:在严格模式下("use strict"),默认绑定在undefined


function foo(){
  console.log(this);
}
foo(); //直接调用,默认绑定 this 指代window

2、隐式绑定

使用 对象.方法() 这就是隐式绑定
方法中的this绑定在前面的对象中

var p  = {
  name : "asd",
  foo : function(){
    console.log(this.name)
  }
}
p.foo(); //this 指代的就是p
![Uploading Paste_Image_131291.png . . .]

3.new 绑定

this 指代将来创建的那个对象

function Person(){
  this.name = "a";
  console.log(this.name);
}
var p = new Person(); //这个时候 Person中的this就是指的p

4.显示绑定

call 、apply 只有这次调用的时候this显示绑定

var p1 = {
  name : "李四",
  age : 23,
  eat : function(){
    console.log(this.name)
  }
}
var p2 = {
  name : "李五",
  age : 22
}
p1.eat.call(p2); //this 指代p2
//使用call的时候,第一个参数表示p1中的this的执行,后面的参数为向这个函数传的值。
//注意一点:如果第一个参数是null,则this仍然是默认的指向。

bind 会返回一个新的函数,永远绑定

Paste_Image.png

5.绑定丢失问题

  1. 回调函数的绑定丢失问题


    Paste_Image.png
  2. 显示 绑定传入undefined和null的时候的问题
    this就会变成默认绑定 (window)
上一篇下一篇

猜你喜欢

热点阅读