zoukankan      html  css  js  c++  java
  • JavaScript学习笔记--this全面解析

    this全面解析

    1.this是什么

    this 就是一个指针,指向我们运行时调用函数的对象。

     

    2.为什么要使用this

    this 提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将 API 设计 得更加简洁并且易于复用。

     

    3.绑定this

    3.1默认绑定

    首先要介绍的是最常用的函数调用类型:独立函数调用。可以把这条规则看作是无法应用 其他规则时的默认规则。在这种情况下,this指向全局对象。

    function foo() {
      console.log( this.a );
    }
    
    var a = 2;
    foo(); // 2

    3.2隐式绑定

    另一条需要考虑的规则是调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含。

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

    3.3显式绑定

    以使用 call(..)apply(..)方法。它们的第一个参数是一个对象,它们会把这个对象绑定到 this,接着在调用函数时指定这个 this。

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

    3.4new绑定

    使用new来调用函数,会自动执行下面的操作。

    1. 创建一个全新的对象。

    2. 这个新对象会被执行原型连接。

    3. 这个新对象会绑定到函数调用的this

    4. 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。

    function foo(a) {
      this.a = a;
    }
    var bar = new foo(2); console.log( bar.a ); // 2

    4.this绑定优先级

    默认绑定 < 隐式绑定 < 显式绑定 < new 绑定

     

    5.箭头函数中的this绑定

    箭头函数不使用 this 的四种标准规则,而是根据外层(函数或者全局)作 1 function foo() {

    function foo() {
      // 返回一个箭头函数
      return (a) => {
        //this 继承自 foo()
        console.log( this.a );
      };
    }
    
    var obj1 = {
      a:2
    };
    
    var obj2 = {
      a:3
    };
    
    var bar = foo.call( obj1 ); bar.call( obj2 ); // 2, 不是 3 !

     

    注:本文实际上是《你不知道的JavaScript(上卷)》关于this的读书笔记

  • 相关阅读:
    利用dns类和WMI规范获取IP及MAC地址
    vs2010编辑器中代码前的虚线问题
    项目发布方法
    HTML5 声明兼容IE的写法 asp.net 狼
    Jquery总结 狼
    IE、FF、Chrome、兼容性文章 狼
    sql游标实现行列转换 狼
    【狼的格言】 狼
    设计模式提升与加强一 狼
    读Head.First设计模式有感 狼
  • 原文地址:https://www.cnblogs.com/tanyx/p/12158561.html
Copyright © 2011-2022 走看看