• js:语言精髓笔记12--动态语言特性(2)


    对于括号内:

    • 通过赋值时发生的重写:
    (Object1 = function() {}).prototype.value = 100;
    var obj1 = new Object1;
    console.log(obj1.value);  // 100
    
    • 语法声明阶段的重写: //会报错,一般引擎不承认在表达式中声明的标识符;
    (function Object2() {}).prototype.value = 100;

    重写:

    • 对内部对象系统的影响:
      • 重写内置构造器:任意构造器的原型属性不受内置构造器重写的影响,它总是创建自一个系统引擎中的构造器;
      • 重写内置构造器的原型:会影响内部对象系统;
      • 对象类型的直接量声明,与它的构造类直接绑定;
    • 对象成员的重写:
      • 重写检测:hasOwnProperty,检查是否重写了继承属性,注意前提是维护有效的原型链;
      • 重写删除:
        • delete obj1.name //删除自有的;
        • delete obj1.constructor.prototype.name //删除继承的;
        • //删除obj原型链中最近的那个prop属性;
          function deleteProperty(obj, prop) { if (prop in obj) { do { if (obj.hasOwnProperty(prop)) break; } while (obj.constructor && (obj = obj.constructor.prototype)); } delete obj[prop]; }
    • 宿主对重写的限制:
      • 涉及维护引用;
      • 涉及触发行为;
    • 引擎对重写的限制:
      • this不能被重写;

    包装类:

    • JS中存在两套类型系统:元类型系统和对象类型系统;为了实现一切都是对象,JS将元类型数据(boolean,number,string)通过包装类编程对象数据来处理;
    • 包装:
      • 显示包装:
      • 隐式包装:
        • 元数据如果是用普通求值运算或复制运算,则是以非对象的形式;
        • 元对象的隐式包装总是发生在成员存取运算符中;

    JS统一语言范型的基本模型:

    • 一切都是对象: aFunc instanceof Object == true;
    • 对象由函数构造: aObj = new aFunc();

     关联数组:

    • 分类:索引数组、关联数组;
    • 关联数组是实现对象系统的基础,JS中对象(的原型)所持有的属性表,就是一个关联数组的内存表达式:
      • 属性存取,就是查表;
      • 对象实例,就是一个可以动态添加元素的关联数组;
      • 原型继承,就是在继承链的关联数组中查找元素;

    值运算:

    • 隐式转换:
      • 运算导致://通常语法分析期,JS引擎首先解析运算符,并将其操作的运算元(标识符或直接量)置入语法树,但这一过程并不对运算元做类型推定;在执行期,引擎执行语法树运算,先根据元算符所支持的元算元类型进行一次操作数的隐式转换;
      • 语义导致: //一些语句在语义分析时也会做一些强制转换操作; //if,while等;
    • 值类型之间的转换:
      • undefined:  //任何其它类型都不会转换为undefined
        • 'undefined';
        • NaN;
        • false;
      • number:   //任何值都会转换到number,至少是NaN;

     

  • 相关阅读:
    变量
    数据类型
    常量
    synchronized&volatile
    类,方法,成员变量和局部变量的可用修饰符
    类及其组成所使用的常见修饰符
    四种权限修饰符
    import
    finally
    final
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4094288.html
Copyright © 2020-2023  润新知