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;
- undefined: //任何其它类型都不会转换为undefined
js:语言精髓笔记12--动态语言特性(2)的更多相关文章
- js:语言精髓笔记11--动态语言特性(1)
语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...
- 12 动态语言 __slots__
1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用.它是一类 在运行时可以改变其结构的语言 :例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删 ...
- js:语言精髓笔记7----原型继承
面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...
- js:语言精髓笔记8--对象系统
封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...
- Go语言学习笔记(一) [Go语言的HelloWorld]
日期:2014年7月18日 1.简介 Go 编程语言是一个使得程序员更加有效率的开源项目.Go 是有表达力.简 洁.清晰和有效率的.它的并行机制使其很容易编写多核和网络应用,而新奇的类型系 ...
- C语言学习笔记一---C语言概述
一.编程语言与解释语言 1.程序的执行 a.解释:借助一个能试图理解程序的程序,使计算机按要求执行你自己写的程序 b.编译:将所写程序翻译为机器语言写的程序,使计算机按要求执行你自己写的程序 2.两者 ...
- js:语言精髓笔记9--函数式语言特征
形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...
- js:语言精髓笔记5----语言分类
计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类: //编程的经典法则 ...
- js:语言精髓笔记1--标识符与基本类型
标识符: 命名: 语法以及类型----语法关键字 //逻辑 值(的存储位置)----变量和常量 ...
随机推荐
- Spark Streaming和Flume-NG对接实验
Spark Streaming是一个新的实时计算的利器,而且还在快速的发展.它将输入流切分成一个个的DStream转换为RDD,从而可以使用Spark来处理.它直接支持多种数据源:Kafka, Flu ...
- JSON做下拉表格
主页面,5-18j.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- php面试题之二——数据结构和算法(高级部分)
二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...
- [ruby on rails] 跟我学之(9)删除数据
首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...
- JavaScript 在页面上显示数字时钟
显示一个钟表 拓展JavaScript计时:http://www.w3school.com.cn/js/js_timing.asp setTimeout() 方法会返回某个值.在下面的语句中,值被储存 ...
- c++0x新特性实例(比较常用的)
//array #include <array> void Foo() { array<> a; generate(a.begin(),a.end(),rand); sort( ...
- 【python】a[::-1]翻转
设有一个元组或者列表 a = (1,2,3,4) b = [1,2,3,4] 则a[::-1]和b[::-1]的含义是将元组或列表的内容翻转 a[::-1] # 结果为(4,3,2,1) b[::-1 ...
- HDU 5514 Frogs (容斥原理+因子分解)
题目链接 题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 题解:暴力肯定会超时,首先分解出m的因子,自己本身不用分,因为石头编号是0 ...
- struts标签--logic总结
1. logic:empty 该标签是用来判断是否为空的.如果为空,该标签体中嵌入的内容就会被处理.该标签用于以下情况: 1)当Java对象为null时: 2)当String对象为"&quo ...
- android中src和background区别
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对src ...