美文网首页
Javascript this 绑定

Javascript this 绑定

作者: 小旎子_8327 | 来源:发表于2019-06-17 16:25 被阅读0次

想要理解this,你可以先记住以下两点:

1:this永远指向一个对象;
2:this的指向完全取决于函数调用的位置;

this的绑定形式一共有如下四种

  • 默认绑定
  • 隐式绑定
  • 显式绑定
  • new 绑定
默认绑定:

故事1.1:里斯(this)到了天黑也没找到住所,这时候村长window大发慈悲的收留了他,于是里斯赖上了村长,绑定了他

例1:

function f(){
    console.log("this指向",this);
}
f()// 这时候打印出来发现,this指向了window

故事1.2:里斯(this)到了天黑也没找到住所,而且村里规定严格,不能随意收留人,这时候村长window也没辙了,于是里斯继续无家可归,谁也绑定不上

例2:

function f(){
   'use strict';
    console.log("this指向",this);
}
f()// 这时候打印出来发现,this是undefined

故事1.3:this不指向函数,this永远指向一个对象
例3:

function f () {
  // 我是被定义在函数内部的函数哦!
  function innerFire() {
      console.log(this === window)
  }
  innerFire(); // 独立函数调用
}
f();//true 
隐式绑定:

故事1:里斯租了个房子obj,this绑定了就是这个房子obj
例1:

var a=2
function f () {
      console.log(this.a)
}
  
var obj = {
      a: 1,
      f: f
  }
obj.f(); //1

故事2:里斯的房子就跟俄罗斯套娃一样,一层套一层,但是this只绑定最里层的房子
例2:

var obj = {
      a: 1,
      obj2: {
           a: 2,
           obj3: {
                a:3,
                getA: function () {
                    console.log(this.a)   
                 }
           }
       }
}
 
obj.obj2.obj3.getA();  // 输出3

里斯的房子丢失了
例3.1:隐式丢失

var a=2
function f () {
      console.log(this.a)
}
  
var obj = {
      a: 1,
      f: f
  }
var fGlobal = obj.f;
fGlobal() //2

例3.2:隐式丢失

var a=2
function f () {
      console.log(this.a)
}
  
var obj = {
      a: 1,
      f: f
  }
function otherF(fn){
   fn();
}
otherF(obj.f) //2
显式绑定(call和bind方法):

里斯花钱买了个大房子

var obj = {
      a: 1,    // a是定义在对象obj中的属性
      fire: function () {
         console.log(this.a)
      }
}
 
var a = 2;  // a是定义在全局环境中的变量  
var fireInGrobal = obj.fire;
fireInGrobal();   // 输出2
fireInGrobal.call(obj); // 输出1
new绑定

执行new操作的时候,将创建一个新的对象,并且将构造函数的this指向所创建的新对象

function foo (a) {
     this.a = a;
}
 
var a1  = new foo (1);
var a2  = new foo (2);
var a3  = new foo (3);
var a4  = new foo (4);
 
console.log(a1.a); // 输出1
console.log(a2.a); // 输出2
console.log(a3.a); // 输出3
console.log(a4.a); // 输出4

相关文章

  • JavaScript绑定事件的三种方式

    @(javascript)[JavaScript事件绑定] JavaScript绑定事件的三种方式 使用内联 使用...

  • AWTK javascript绑定原理

    AWTK javascript绑定原理 一、基本架构 Javascript的绑定方法和lua的绑定方法有些不同,主...

  • Javascript this 绑定

    想要理解this,你可以先记住以下两点: 1:this永远指向一个对象;2:this的指向完全取决于函数调用的位置...

  • 面试宝典

    由数据绑定和排序引入的几个 JavaScript 知识点 在 JavaScript 的数据绑定和做简单的表格排序中...

  • JS事件——绑定

    在DOM元素中直接绑定; 在JavaScript代码中绑定; 绑定事件监听函数。 事件监听 优点:常规的事件绑定只...

  • 浅谈DOM的事件绑定

    事件绑定的方式 给 DOM 元素绑定事件分为两大类:在 html 中直接绑定 和 在 JavaScript 中绑定...

  • JS-this-call/apply/bind

    绑定 this 的方法 参考文章:绑定 this 的方法 this的动态切换,固然为 JavaScript 创造了...

  • Javascript绑定事件的三种方式

    行内绑定 动态绑定 事件监听 addEventListener this 在Javascript中,有一个特殊对象...

  • DOM 0级事件与DOM 2级事件

    1 DOM 0级事件 1.1 绑定事件 1 在标签上直接绑定事件 2 通过JavaScript绑定事件 1.2 删...

  • Vue 双向绑定

    Vue 双向绑定 MVC模式 以往的MVC模式是单向绑定,即Model绑定到View,当我们用JavaScript...

网友评论

      本文标题:Javascript this 绑定

      本文链接:https://www.haomeiwen.com/subject/psvafctx.html