zoukankan      html  css  js  c++  java
  • JS学习梳理(二)this和对象原型

    1. jthis
      • 作用域
        • this 在任何情况下都不指向函数的词法作用域
        • 当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this 就是记录的其中一个属性,会在函数执行的过程中用到
        • this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用
      • this全面解析
        • 调用位置,即调用栈
        • 绑定规则
          • 默认绑定
          • 隐式绑定
          • 显示绑定,call() apply()
          • 硬绑定,ES5提供了Function.prototype.bind
          • new绑定
        • 优先级
          • new绑定 > 硬绑定、显示绑定 > 隐式绑定 > 默认绑定
        • 绑定例外
          • var obj = Object.create(null)
        • this词法,胖箭头函数
          function foo() {
              setTimeout(() => {
                  // 这里的this 在此法上继承自foo()
                  console.log(this.a);
              }, 100);
          }
          var obj = {
              a: 2
          };
          foo.call(obj); // 2

          ES6 中的箭头函数并不会使用四条标准的绑定规则,而是根据当前的词法作用域来决定this,具体来说,箭头函数会继承外层函数调用的this 绑定(无论this 绑定到什么)。这其实和ES6 之前代码中的self = this 机制一样

    2. 对象
      • 主要类型:string, number, boolean, null, undefinded, object
      • 内置对象(内置函数):String, Number, Boolean, Object, Function, Array, Date, RegExp, Error
      • 内容
        • 值访问,键访问
        • 浅复制,深复制
        • 属性描述符
          Object.defineProperty(myObject, "propertyName", {
              value: 2,
              writable: true,
              configurable: true,
              enumerable: true
          });
        • Get
          对象默认的内置[[Get]] 操作首先在对象中查找是否有名称相同的属性,如果找到就会返回这个属性的值,否则遍历原型链。
        • Put
        • Setter, Getter
        • 存在性
          • in (原型链查找)
          • Object.hasOwnProperty (对象内查找)
          • Object.keys(..)(对象内查找)
        • 遍历
          var randoms = {
              [Symbol.iterator]: function () {
                  return {
                      next: function () {
                          return { value: Math.random() };
                      }
                  };
              }
          };
          var randoms_pool = [];
          for (var n of randoms) {
              randoms_pool.push(n);
              // 防止无限运行!
              if (randoms_pool.length === 100) break;
          }
    3. 混合对象“类”
      function mixin(sourceObj, targetObj) {
          for (var key in sourceObj) {
              // 只会在不存在的情况下复制
              if (!(key in targetObj)) {
                  targetObj[key] = sourceObj[key];
              }
          }
          return targetObj;
      }
    4. 原型
      • Bar.prototype = Object.create(Foo.prototype)
    5. 类与对象
  • 相关阅读:
    day 49
    day 48
    day 46
    IOC和DI到底是什么?
    堆排序算法
    快速排序算法
    java中try-catch-finally中的return语句
    归并排序算法
    选择排序算法
    冒泡排序算法
  • 原文地址:https://www.cnblogs.com/chenjunsheep/p/8762388.html
Copyright © 2011-2022 走看看