this

2017-09-30  本文已影响0人  yyyzhen

概念

当一个函数被调用时,会创建一个活动记录(有时也称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方式、传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到

this的四条调用规则:
var a = 1
function foo() {
  console.log(this.a)
}
foo()  // 1

上例中,函数调用时应用了this的默认绑定,因此this指向全局变量。

var a = 3
function foo() {
  console.log(this.a)
}
var obj = {
  a: 2,
  fn: foo
}
obj.fn()  // 2

上例中,函数foo在被调用时,调用位置会用obj的上下文来引用函数,当函数拥有上下文对象时,隐式绑定规则会把函数调用中的this绑定到这个上下文对象,因此,this指向obj。

var a = 2
function foo() {
  console.log(this.a)
}
var obj = {
  a: 3
}

foo.call(obj)  \\ 3

上例中,通过foo.call(...),我们在调用foo时强制把它的this绑定到obj上。

function Foo() {
  console.log(this)
}
var fn = new Foo()  // Object{constructor: Foo}

上例中,使用new来调用Foo(...)时,我们会构造一个新对象并把它绑定到Foo(...)调用中的this上

this四条规则的优先级:

new调用 > 显式调用 > 隐式调用 > 默认绑定

上一篇 下一篇

猜你喜欢

热点阅读