对于括号内:

  • 通过赋值时发生的重写:
(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;

 

js:语言精髓笔记12--动态语言特性(2)的更多相关文章

  1. js:语言精髓笔记11--动态语言特性(1)

    语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...

  2. 12 动态语言 __slots__

    1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用.它是一类 在运行时可以改变其结构的语言 :例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删 ...

  3. js:语言精髓笔记7----原型继承

    面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...

  4. js:语言精髓笔记8--对象系统

    封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...

  5. Go语言学习笔记(一) [Go语言的HelloWorld]

    日期:2014年7月18日   1.简介     Go 编程语言是一个使得程序员更加有效率的开源项目.Go 是有表达力.简 洁.清晰和有效率的.它的并行机制使其很容易编写多核和网络应用,而新奇的类型系 ...

  6. C语言学习笔记一---C语言概述

    一.编程语言与解释语言 1.程序的执行 a.解释:借助一个能试图理解程序的程序,使计算机按要求执行你自己写的程序 b.编译:将所写程序翻译为机器语言写的程序,使计算机按要求执行你自己写的程序 2.两者 ...

  7. js:语言精髓笔记9--函数式语言特征

    形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...

  8. js:语言精髓笔记5----语言分类

    计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类:  //编程的经典法则 ...

  9. js:语言精髓笔记1--标识符与基本类型

    标识符: 命名: 语法以及类型----语法关键字                                           //逻辑 值(的存储位置)----变量和常量           ...

随机推荐

  1. 模式串匹配之KMP算法

    模式串匹配之KMP算法 KMP算法 模式值计算(next[j]) (1) next[0]=-1,  第一个字符模式值为-1 (2) next[j]=-1, T中下标为j的字符与首字符相同,且j前面的1 ...

  2. mySQL笔记1

    create table 表名( 列名 数据类型 是否为空(是否唯一|是否主键|是否外键) 列名 数据类型 …(最后一列不加逗号) )create database 数据库名 insert into ...

  3. 3月23.CSS表格布局

    360表格布局: CSS定义标签: @charset "utf-8";/* CSS Document */.bt1{ border:#309 solid 1px; height:1 ...

  4. 小白科普之JavaScript的JSON

    一.对json的理解     json是一种数据格式,不是一种编程语言,json并不从属于javascript.     json的语法可以表示以下三种类型的值     1)简单值           ...

  5. Systemd入门教程:命令篇

    导读 传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)来处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方 ...

  6. php用soap创建webservice

    php提供了一个专门用于soap操作的扩展库,使用该扩展库后 可以直接在php中进行soap操作.下面将介绍soap的基本操作. 一.soap扩展的使用方法 php的soap扩展库通过soap协议实现 ...

  7. arch linux 新版安装(转)

    原文地址:http://blog.sina.com.cn/s/blog_69e5d8400101bqlj.html 正式安装: 以下,是安装的具体步骤,我将做尽可能详细的解说: 一.基本系统的安装 进 ...

  8. 技术分享:WIFI钓鱼的入门姿势

    简介 该实验先是搭建一个测试环境,然后创建一个假的无线接入点,把网络连接连接到假的接入点并且强迫用户连接假的无线点. 事先准备 1.无线网卡:无线网卡用于数据包的嗅探和注入. 2. Backtrack ...

  9. Linux jstack命令详解

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息. 如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack ...

  10. FOJ 1075

    #include<stdio.h> #include<iostream> using namespace std; ]={,}; ]={}; void func() { ,fl ...