`
fixopen
  • 浏览: 83309 次
文章分类
社区版块
存档分类
最新评论

JavaScript系列教程-JavaScript语言教程

阅读更多
概述
JavaScript是一个基于对象的面向对象语言,同时是一个函数式语言。
跟我们常见的基于类的面向对象语言不同,JavaScript是基于对象的。这意味着JavaScript没有类的存在,只有对象的存在。这个同时也避免了基于类的面向对象语言学理上对于元类的要求,那会导致无限递归。原因是:类作为一种特殊的对象,其也应该有模版,也就是元类,依次类推下来。没有了类,这就要求我们的思路进行完全的转变。我们不再有能力定义一个对象的模版,然后具体的构造出来一个对象。我们自然也丧失了类继承这种方便快捷的重用手法。这会让很多没有基于对象的OO语言背景的程序员感觉困惑、不满和失望。但是,基于对象的面向对象才是真正纯粹的面向对象。只有对象和消息,这是OO的荣光。
JavaScript语言同时是一个函数式语言。它的函数也是一个对象。可以被当作参数传递,可以被当作返回值传递,可以用在任何别的对象可以使用的地方。一定不要小看这个能力,我会让大家看到它的强大之处的。
JavaScript 语言的继承不再是类继承,而是原型继承。不再存在根据类型(因为没有类型了,全是对象)创建对象的过程,而是以一个对象为原型创建另一个对象。 JavaScript的继承依据这个原型链形成森林:)。在JavaScript中,一切都是对象(我不想纠缠引用,因为它不关键)。所有的对象都可以不需要声明而直接使用,对象在JavaScript中其实是一个Hashtable,也就是一个名值对集合。可以通过名字引用其值。
比如:
x.text = "384";
x.dir = 3;
y = x.text;
其实obj.prop是obj["prop"]的简写,以便于看起来更像传统的对象,而obj["prop"]这种写法更清楚地表达了对象就是一个hashtable的事实。
所有对象的属性都可以动态的增删,增加就是简单的引用,如果原来不存在,那么就会创建这么一个属性,删除就是delete后跟对象属性,比如:delete x.text;这表明x的text属性不存在了,下一次使用的时候会创建一个新的。
现在介绍几种典型的literal。
所有的数字,包括整数和实数,都采用数学中常用的表示方法,毋用多说。用""或者''表示字符串,这个也是常见。用{prop:value, prop:value, ……}来表达对象,这个用法非常常见,希望注意。对于数组,用[element, element, ……]来表达。对于函数对象,写法如下:function(...){...},其中()中是函数的参数,{}中是函数的内容。
再强调一遍,它们都是对象。
x = {name: "张三", age: 28, 职业: '挨踢人士'};
y = [38, {text: "....", id: '23432', tag: 'div'}, "12345,shangshanda"];
z = function(x, y){return x + y};
大家仔细分析一下上面的代码,深入理解对象在JavaScript中的作用。
继承
继承是在基于类的面向对象语言中耳熟能详的概念,但是JavaScript没有类,其继承也就完全变成另一种风格了。上面说过,JavaScript中的继承是原型继承,是以一个对象为原型创建另一个对象。那么怎么表达这种关系呢?且看:
x.prototype = y;
这儿就表明了,x是以y为原型的。因此,x现在,至少是现在,跟y是一模一样的。别忘了,我们任何对象的属性都是可以动态增删的,所以,x在以后跟y完全不一样也没有什么值得大惊小怪的。
构造子
JavaScript 没有类,有时候我们期待能够抽象的描述一个对象原型,然后依次为基础创建出大量类似的对象,这就是劳构造子大驾的时候了。构造子就是一个函数对象。当它被放在new这个关键字后面的时候,运行时就知道这个函数是被当作一个构造子使用的。这样,我们的对象就是以该函数为原型构造出来的。其实, JavaScript语言内定了几个构造子,也就是我们所谓的JavaScript内建类型了(由此话可以看出我受基于类的面向对象语言的毒害有多深)。常用的有Number,Date,RegExp,Object,String,Error,……Math,Global。其中后两个不需要用new以它们为原型构造一个新对象,而且也不能如此。
进一步的继承
还是上面说的,继承是原型继承,是以prototype这个保留字完成的。但是继承还有一些需要讨论的东西。
并不是全部都继承。这是一个比较让人惊奇的地方,但是,这也是JavaScript用来表达某些意图必不可少的一个机制。
现在我们看看,究竟会继承什么呢?
x.prototype = new Object(); //如果这儿你没有看懂,证明上面的继承和构造子你没有仔细看,敬请仔细看看,说得非常详细了。
我们说x继承自Object,或者说,x以Object为原型。或者用更基于类的面向对象的术语来说,x是Object类的对象。那么,x是不是从 Object继承了所有的properties呢?不是。x从Object那里继承了那些被规定为原型的属性。具体的说,就是那种 Object.prototype.nnn,向这样的nnn才会被x继承。例示之:
Object.name = "obj";
Object.prototype.class = "Object";
x.prototype = new Object();
这时候,x拥有class属性,但是没有name属性。再一次重申,对象的属性是可以动态的添加删除的。
值得一提的是:所有的用户定义(或者创建)的对象,都自动继承自Object。
关于全局和局部变量
没有任何标志的变量就是全局变量,变量第一次出现时,前面有var关键字的就是局部变量。局部变量的作用于局限在自己的scope之内。一个{}定义一个 scope。所有的对象,函数和代码片断,如果不在某个scope之内,就作为Global对象的属性出现。Global对象的属性可以直接用 propName引用,也就是说,可以省略Global.propName中的Global和.。
表达式和语句
JavaScript几乎支持所有C++/Java的表达式方式。值得注意的是void也作为一个运算符存在。void expr;表示执行expr,完成其副作用,但是丢弃其结果。对于语句,也跟Java/C++之类的语言大同小异。需要注意的是for(.. in ..)这种对于容器的遍历手法。另一个比较陌生的语句是从VB/Delphi借鉴来的with语句,用with(obj){properites access}这种方式方便的访问对象的属性。另外值得注意的是JavaScript拥有完整的异常处理机制,try catch finally throw。比C++方便。
我前面说了JavaScript预定义了一批构造子,其实这些构造子都可以看作是Global对象的属性。 JavaScript中对象的属性都可以用一些特性来描述,比如:是否可以被列举,是否是只读的,是否可以被删除等等。JavaScript程序在运行时,还会有些一些内部对象,包括Activation等,在程序中是不会直接引用的,但是JavaScript程序解释器用它来记录程序执行的上下文。
几个特殊的对象
this 是一个特殊的对象,它用来表达进入执行上下文时,那个拥有这个程序段的对象。arguments对象是参数对象,在一个函数执行中,我们可以使用这个对象获知该函数的各个参数以及其他相关信息。this和arguments是让你的程序拥有弹性的强大武器,不可不理解,不可不用啊。
分享到:
评论

相关推荐

    JavaScript教程--从入门到精通.zip

    总之,"JavaScript教程--从入门到精通"涵盖了JavaScript语言的方方面面,从基础语法到高级特性,再到实际应用,全面系统地教授了这门语言。通过学习和实践,你将能够编写出高效、可维护的JavaScript代码,实现各种...

    JavaScript前端开发案例教程-源代码.rar

    这个名为"JavaScript前端开发案例教程-源代码.rar"的压缩包文件提供了一系列实践案例,帮助开发者深入理解和掌握JavaScript在网页开发中的应用。 首先,JavaScript是一种解释型、弱类型、基于原型的脚本语言,它的...

    JavaScript教程--从入门到精通

    "JavaScript教程--从入门到精通"旨在帮助初学者系统地掌握这门语言,并逐步提升为专家级水平。以下是对JavaScript的一些核心知识点的详细介绍: 1. **基础语法**:JavaScript的基础包括变量、数据类型(如字符串、...

    Javascript教程--从入门到精通【完整版】.doc

    4. **安全性**:JavaScript 为了保护用户的安全,设计了一系列安全机制。例如,它不能直接访问用户的硬盘文件,不能修改或删除网络文档,只能通过浏览器与用户交互,防止恶意代码对用户数据的操纵。 5. **动态性**...

    Javascript教程--从入门到精通【完整版】.zip

    总的来说,这份“Javascript教程--从入门到精通【完整版】”将涵盖JavaScript语言基础、核心概念、面向对象编程、异步处理、DOM操作、事件处理、ES6新特性以及现代前端开发实践等多个方面,对于想要系统学习和提升...

    Javascript教程--从入门到精通【完整版】

    ### JavaScript教程知识点详解 #### 一、JavaScript简介与背景 - **时代背景**:随着互联网技术的迅猛发展,人们越来越需要一种能够使网页更加生动、交互性更强的技术。早期的HTML仅支持静态页面,无法满足现代...

    javascript教程--不错的教科书

    JavaScript教程是学习Web开发不可或缺的一部分,它是一种轻量级、解释型的编程语言,主要用于增强网页和应用程序的交互性。本教程将深入介绍JavaScript的核心概念和技术,帮助你掌握这一强大的工具。 1. **基础语法...

    JavaScript教程--从入门到精通(ppt)

    2. 基于对象:JavaScript支持基于对象的编程,它提供了一系列内置对象,如Array、Date等,可以直接使用或创建自定义对象。 3. 简单性:JavaScript语法简洁,易于学习,尤其适合初学者入门。 4. 安全性:JavaScript...

    JavaScript基础教程(pdf版)

    总的来说,这个JavaScript教程系列涵盖了从基础到进阶的所有重要知识点,无论你是网页开发者还是希望增强Web应用功能的程序员,都能从中受益匪浅。通过深入学习和实践,你将能够熟练运用JavaScript来创建交互式、...

    javascript实例应用---日期时间类.rar

    这个压缩包"javascript实例应用---日期时间类.rar"很可能包含了一系列与日期时间操作相关的代码示例和教程。 `Date`对象是JavaScript内置的对象类型,它允许我们创建、操作和格式化日期和时间。以下是一些关于...

    javascript经典特效---Form框中导航.rar

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现客户端的交互效果和动态功能。在网页设计中,Form框是收集用户输入数据的重要元素,而导航则是帮助用户在页面间跳转的关键部分。...

    javascript经典特效---极具创意的文字显示.rar

    首先,JavaScript是一种广泛应用于Web开发的脚本语言,它允许开发者在用户与网页交互时动态更新内容。在本例中,"极具创意的文字显示.htm"可能是包含该特效的HTML文件,它可能通过JavaScript代码来控制文字的展示...

    JavaScript系列教程1

    这一系列教程“JavaScript系列教程1”可能涵盖了JavaScript的基础知识,包括但不限于以下几个方面: 1. **基础语法**:JavaScript的基本数据类型(如字符串、数字、布尔值、null和undefined)、变量声明(var、let...

    JavaScript+jQuery网页特效设计任务驱动教程-PPT.zip

    首先,JavaScript是一种轻量级的解释型编程语言,常用于网页和浏览器端的编程。它允许开发者在用户与网页交互时动态改变内容,提供丰富的用户体验。JavaScript的核心概念包括变量、数据类型、控制结构(如条件语句和...

    JavaScript系列教程2

    总的来说,这个JavaScript系列教程2覆盖了从基础到实践的全面内容,无论是对网页动态效果的实现,还是构建复杂的Web应用程序,都将提供必要的知识和技能。通过系统学习,读者将能够独立完成JavaScript相关的开发任务...

    javascript经典特效---发信(四).rar

    【描述】:“发信(四).rar发信(四).rar发信(四).rar发信(四).rar发信(四).rar发信(四).rar”描述虽然重复,但可以推测这是一个系列教程的第四部分,专注于JavaScript邮件发送功能的深入讲解。可能在前三个部分中,...

    JAVASCRIPT语言教程.rar_javascript_javascript 教程_script

    "JAVASCRIPT语言教程"可能包含以上这些概念的详细解释和示例,帮助初学者理解并掌握JavaScript语言。而"JavaScript源代码集"则可能提供实际的代码实例,让学习者有机会实践所学知识。"www.pudn.com.txt"可能是相关...

Global site tag (gtag.js) - Google Analytics