this的几种使用场景

  

首先,this要在执行时才能确认值,定义时无法确认.而在es6的箭头函数中,this则是在定义时所在的对象

this对象有四种使用的场景:

第一种情况: 全局下this  

由于全局下的变量是window的属性,函数是window的方法

所以

栗子:

function fn1 (){

  return this

}

console.log(fn1())  //window

注意: 在严格模式下 “use strict”  this是undefined

第二种情况:构造函数

(1).当函数作为构造函数调用时,this代表new出来的对象;

(2).如果没有使用new而是直接调用函数,this===window;

(3).不仅仅是构造函数的prototype,即便是在整个原型链中,this代表的也是当前对象的值;

栗子:

function Foo (name){

  this.name = name ;

  console.log(this)

}

var foo = new Foo('Emma');  //Foo {name: "Emma"} 

Foo() //window

第三种情况:函数作为对象的一个属性

这里有两种情况

(1).函数作为对象的一个属性被调用的时候,this指向的是该对象;

(2).函数作为对象的一个属性被赋值到另一个变量中调用,this===window

栗子:

 

var obj = {

  x :10,

  fn:function(){

    console.log(this)

  }

}

obj.fn()   //当前对象

var newFn = obj.fn;  newFn() //window

第四种情况: 函数用apply() call() bind()调用时,this取得是传入的对象

他们的具体使用方法及不同点单独总结了

https://www.cnblogs.com/emma-zhao/p/10687992.html

posted @ 2019-04-11 11:13  Emma.Zhao  阅读(938)  评论(0编辑  收藏  举报