首先 面向对象特性 :封装继承多态,满足部分特性的语言称为“基于对象语言”。
这些统称为‘对象系统’,‘对象系统’的继承特性三种实现方案: 基于类 基于原型 基于元类。
在javascript中采用基于‘构造器’机制来实现类的一些功能。
javascript的优点也是它的缺点,对于大型对象系统,对 对象的封装和多态支持不够,对于小型系统,又由于‘动态,函数式,原型继承’的灵活性而带来混杂。
javascript的原型继承依赖 关联数组 和 函数式语言 两方面特性;另外原型重写与原型链维护还涉及到动态语言特性。
所以 ,尽管 原型 是一种简义的单的对象系统实现,但在javascript中,具有了双重含性质。
-------------函数式语言介绍 -------------------
函数是lambda 并非 function
函数式语言属于说明式语言,对应的是命令式语言
在计算机技术发展中,命令式语言 依赖并引导 冯.诺依曼体系的硬件系统(基于存储和运算)的产生。
除了被称为LISP机器的 硬件,没有其他的硬件系统在机器指令级别支持函数式语言 ,大多数人都在使用冯.诺依曼体系的命令式语言,
但为了获得特别的计算能力或者编程特性,这些语言也在逻辑层面来实现一种适宜于函数式语言范畴的环境,如javascript这样的多泛型语言和.net与jvm能够运行某些函数式运算的虚拟机环境;
所以函数式运算是一个图灵等价的运算系统;
函数式语言代码风格所表达的基本语言特性之一就是 连续运算。因此从理论来说,函数式语言不需要寄存器或变量赋值。
函数式语言中的‘函数’需要满足:
1,函数是运算元; (不像c那样函数作为指针,传递的是内存地址;JavaScript函数是普通的运算元)
2,在函数内保存数据; (在函数内保存数据的特性成为 闭包)
3,函数内的运算对函数外无副作用。
函数式语言的精髓并不是函数,而是运算,函数只是封装运算的一种手段;这里也提到的计算机的本质:运算!!!!!!
javascript并没有完全满足三特性,体现在 对循环逻辑的封装上。在‘尾递归’与‘利用多泛型特性来包含循环语句’这两个方案上,选择了后者。
并不是支持函数的语言就叫做函数式语言;并不是命令式语言中的function和procedure,也不是javascript中看到的function关键字或Function类型,
所以仅凭javascript中函数是第一型,推出javascript是函数式语言是不正确的。
函数是 lambda 并非 function;
函数式语言Scheme,编程模式:function[args].运算符和运算元。
要让javascript中的函数(function)能够替代运算符,并起到Scheme中函数的作用,前提就是让function可以作为运算元,也就是既可以作为参数在函数中
传入传出,也可以作为函数来执行调用;在函数式语言中叫做高阶函数;
(高阶函数:让函数作为运算元:函数既可以作为数据值存储与向函数传入传出,又可以作为函数来执行调用 )
------------动态语言介绍---------------------
语言包括‘语法’、'语义'、'语用',如果某种语用在语言陈述时无法确定而在执行时才能确定这三者之间的关系,我们称该语言是动态语言的。
如 javascript中代码: a+b ,不能确定是字符串连接还是数值求和。
JavaScript是完全动态的语言 | 在javascript中,存在 ‘标识符指称不确定’ 和 ‘上下文环境不确定’ 。
‘标识符指称不确定’表现在:动态类型,动态重写和动态存取的数据结构三方面。
‘上下文环境不确定’表现在:动态的变量/语法作用域。
JavaScript脚本语言:代表应用的依赖,而非语言的依赖。在一些解决方案中,也可以作为通用语言来实现系统。
强调脚本只是一种表现形式,‘脚本化’并非javascript这种语言的本质特征;
除去表面现象,JavaScript动态性表现:
1,解释而非编译;2,可以重写标识符(除关键字),以重新定义系统特性。
3,动态类型系统(JavaScript是弱类型,也是动态类型) 4,动态执行 eval() 5,丰富的数据外部表示;可序列化。
javascript由于动态执行导致不可编译;(真正的编译为二进制)
重写
javascript基于原型重写与原型修改构造继承系统;
由于引擎在语法分析期既不能对重写行为进行任何预期,也不能进行限制;因此会导致不可预料的代码逻辑错误;
因此,我们在使用javascript时,得到了‘足够的’ ,以及‘难以驾驭的’灵活性;
脚本加载的时序就会影响系统的一些重写特性;
包装类及一切都是对象
javascript中存在两套类型系统:
一是元类型系统(meta types) 由typeof运算符检测 undefined string boolean number function object
二是对新类型系统。object的分支 String,Number......
在javascript中,除了undefined外,其他一切都是‘对象’;
对于元数据:普通的求值/赋值运算,它还是以‘非对象’形式存在;在对元数据进行对象系统的方法调用(属性赋值、调用方法等)时,会自动进行包装,要注意包装对象并不等同于原来的对象;
因此,元数据的方法调用其实是被临时地隔离在另外的一个对象中完成的;所以无论如何修改这个临时的包装对象,都不会影响原来的元数据值。
javascript 统一函数式语言与面向对象编程(命令式语言范型)的核心思想,一方面表现为‘一切都是对象’,另一方面表现为‘函数是第一型’ 。
JavaScript数组:关联数组(动态数组) 类似map
索引数组:以序数类型作为下标,按序存取元素的数组。 连续内存分配。
关联数组:以非序数类型作为下标变量来存取的数组。 指针形式存储。
JavaScript中数组下标必须为值类型(非值类型被转换为字符串),
JavaScript中值类型:number、boolean、string。(只有boolean是序数。number在JavaScript中实现为浮点数)
因此JavaScript必然以关联数组为基础,JavaScript中的‘索引数组’只是用数字的形式来存取一个关联数组。
实际上,在Array类型前,系统已经为Object类型实现好了关联数组特性。对象(的原型)所持有的属性表,就是一个关联数组的内存表达。
运算的实质:值运算。
引用类型的价值:1,标识一组值数据;2,提供一组存取值数据的规则;3,在函数中传递与存储引用
分享到:
相关推荐
"JavaScript+语言精髓与编程实践"这本书,正是为了帮助开发者深入理解和掌握这门语言的核心概念以及最佳实践。 首先,书中会详细阐述JavaScript的基本语法,包括变量声明、数据类型(如原始值和引用值)、操作符、...
《JavaScript语言精髓与编程实践》精简版 动态函数式语言精髓 本书讲述了JavaScript的语言实现与扩展,主要包括以下三个方面的内容:(1)动态、函数式语言,以及其它语言特性在JavaScript的表现与应用;(2)如何用...
JAVASCRIPT语言精髓与编程实践
javascript语言精髓与编程实践,很不错的一本书,搜集了好久,希望对大家有用
《JavaScript语言精髓与编程实践》精选版从JavaScript 无关的角度综论这些语言的产生发展,以及特性的概要。作为纯语言学范畴的讨论,读者在本摘引中不需要过多地了解JavaScript,也不必深究某种语言的细节,作参考...
本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深...
JavaScript语言精髓与编程实践主要探讨了JavaScript这门广泛使用的编程语言的核心概念和实际应用。在提供的内容中,特别提到了CSS(层叠样式表)在Internet Explorer浏览器中的扩展,尤其是expression属性,这是一个...
"JavaScript语言精髓和编程实践"这个主题,旨在深入探讨JavaScript的核心概念、最佳实践以及在实际项目中的应用。 首先,我们需要理解JavaScript的基本语法,包括变量声明(var、let、const)、数据类型(如字符串...
下载文件是HTML+CSS+JavaScript编程入门指南这本书的示例代码,全书分HTML,CSS与JavaScript三个部分,然后结合三个部分用项目说明应用方法。各部分的代码展示了三种语言的使用方法,可以搭配webstorp执行
通过分析和实践这个"JavaScript+jQuery程序设计 源码",学习者不仅能巩固JavaScript和jQuery的基础知识,还能提升实际项目开发经验,尤其是处理网页交互和动态效果的能力。同时,这也将有助于理解和应用更多高级特性...
《Javascript+DOM编程艺术(完整版)》是Jeremy Keith所著的一本关于前端开发技术的书籍,专注于Web设计中的JavaScript和DOM编程。本书被认为是前端开发者必读的经典之作,其清晰的文笔、遵循优秀的编程原则和严格的...