Javascript之this

2017-03-02  本文已影响31人  起这么长的名字根本没有用

一.、概念

this是在运行时进行绑定的,不是在编写时进行绑定,取决于函数的调用方式

二、四条绑定规则

  1. 默认绑定
    即独立函数调用,无法应用其他规则时使用此规则
      function foo(){
        "use strict"
        console.log(this.a);
      }
      var a = 2;
      foo() //严格模式下,this不指向window,否则指向window
  1. 隐式绑定
    当函数引用有上下文对象时,隐式绑定会把this绑定到该上下文对象;

例如:

      function foo(){
        console.log(this.a);
      }
    var obj = {
      a:42,
      foo:foo
    }
    obj.foo()
注:对象属性引用链中只有最后一层影响调用位置

例如:

    function foo(){
      console.log(this.a);
    }
    var obj = {
      a:2,
      foo:foo
    }
    var obj1 = {
      a:22,
      obj:obj
    }
    obj1.obj.foo() //2

2_1:隐式绑定丢失

      function foo(){
        console.log(this.a);
      }
      var obj = {
        a:2,
        foo:foo
      }
      var bar = obj.foo;
      var a = "oops"
      bar() //osps

3.显式绑定

      function foo(){
        console.log(this.a)
      }
      var obj = {
        a:2
      }
      var bar = function (){
        foo.call(obj)
      }
      bar() //2
      setTimeout(bar,100)//2
      bar.call(window)//2

4.New操作符绑定

function Foo(){
  this.name ="A"
}
var obj =new Foo()
console.log(obj.name);

三、绑定优先级

new操作符>显式>隐式>默认

上一篇 下一篇

猜你喜欢

热点阅读