JAVASCRIPT是一门面向对象语言
常见的程序设计语言及特点

常见的程序设计语言及特点
常见的程序设计语言包括:C、C++、Java、Python、JavaScript、Php、C#等。
1. C语言:是一种通用的程序设计语言,易于编写、编译和调试,适用于系统软件和应用软件的开发。
C语言的特点是结构化、可移植性好、代码执行效率高。
2. C++语言:在C语言的基础上发展而来,是一种面向对象的程序设计语言,支持类、继承、多态等特性。
C++语言的特点
是高效、灵活、可扩展、可移植性好。
3. Java语言:是一种面向对象的程序设计语言,具有跨平台性,一次编写,到处运行。
Java语言的特点是安全、稳定、可移植性好,适合大型应用程序和企业级开发。
4. Python语言:是一种高级的、通用的、解释型的程序设计
语言,具有简洁明了的语法和强大的标准库。
Python语言的
特点是简单易学、代码可读性高、开发效率高。
5. JavaScript语言:是一种用于编写网页脚本的动态编程语言,主要用于前端网页开发。
JavaScript语言的特点是灵活、互动
性强、浏览器支持广泛。
6. PHP语言:是一种用于开发Web应用程序的脚本语言,主
要嵌入到HTML中。
PHP语言的特点是易于学习、开发效率高、支持多种数据库。
7. C#语言:是微软公司开发的一种面向对象的程序设计语言,主要用于Windows平台的开发。
C#语言的特点是简单、安全、高性能,可用于多种应用程序开发。
计算机网络-判断题

计算机网络-判断题计算机网络-判断题1.1 网络域名地址便于用户记忆,通俗易懂,可以采用英文也可以用中文名称命名。
(R)1.2 RIP(Routing Information Protocol)是一种路由协议。
(R )1.3 传输控制协议(TCP)属于传输层协议,而用户数据报协议(UDP)属于网络层协议。
(E)1.4 网络中机器的标准名称包括域名和主机名,采取多段表示方法,各段间用圆点分开。
(R )1.5 网络域名地址一般都通俗易懂,大多采用英文名称的缩写来命名。
(R )1.6 ISO划分网络层次的基本原则是:不同节点具有不同的层次,不同节点的相同层次有相同的功能。
(R)1.7 目前使用的广域网基本都采用星型拓扑结构。
( E)1.8 在TCP/IP 体系中,ARP 属于网络层协议。
(R)1.9 PPP (Point-to-Point Protocol,点到点的协议)是一种在同步或异步线路上对数据包进行封装的数据链路协议,早期的家庭拨号上网主要采用SLIP 协议,而现在更多的是用PPP 协议。
(R)1.10 IP层是TCP/IP实现网络互连的关键,但IP层不提供可靠性保障,所以TCP/IP网络中没有可靠性机制。
………………………………………………………………………………………………(×)1.11 TCP/IP可以用于同一主机上不同进程之间的通信。
……………………………………………(√)1.12 ICMP协议是IP协议的一部分。
(T)1.13 波分多路复用WDM就相当于TDM在光纤介质上的应用。
(F)1.14 在因特网的层次体系结构中,网络层的作用是在收发双方主机中的应用进程之间传输数据。
(F)正确1:在因特网的层次体系结构中,运输层的作用是在收发双方主机中的应用进程之间传输数据。
正确2:在因特网的层次体系结构中,网络层的作用是在收发双方主机中之间传输数据。
1.15 通过引入CRC校验以及确认和重传机制,使得网络可实现可靠的数据传输。
JavaScript脚本语言教程

JavaScript脚本语言教程第一章:引言JavaScript是一种用于编写交互式网页的脚本语言。
它是一种强大而灵活的语言,在现代Web开发中得到了广泛应用。
本教程将介绍JavaScript的基本语法、数据类型和常用功能,帮助初学者快速入门。
第二章:JavaScript语法基础2.1 变量与数据类型JavaScript的变量使用关键字"var"声明,并且不需要提前声明变量类型。
JavaScript有多种数据类型,包括数字、字符串、布尔值、数组和对象等。
本节将详细介绍变量的声明和数据类型的使用。
2.2 运算符与表达式JavaScript中包含多种运算符,包括算术运算、赋值运算、比较运算和逻辑运算等。
作者将逐个介绍这些运算符的使用方法,并给出示例代码。
2.3 控制流程语句JavaScript的控制流程语句包括条件语句、循环语句和函数等。
本节将详细介绍这些语句的用法,并通过实例讲解其具体应用场景。
第三章:JavaScript高级特性3.1 对象与原型JavaScript是一种面向对象的语言,它通过对象和原型来实现封装和继承。
本节将介绍JavaScript中对象的创建、属性的添加和访问,以及原型的使用方法。
3.2 函数和闭包函数是JavaScript中的一等公民,它具有多个强大的特性,如函数的嵌套、匿名函数和闭包等。
这些特性使得JavaScript在处理复杂逻辑时非常灵活。
本节将讲解函数的定义、调用和参数传递,并详细介绍闭包的概念和用法。
3.3 异步编程与事件驱动JavaScript采用单线程执行模型,但通过异步编程和事件驱动的方式来处理并发任务。
本节将介绍异步编程的原理和常用的异步编程模式,包括回调函数、Promise和async/await等。
第四章:JavaScript与浏览器交互4.1 DOM操作JavaScript可以通过Document Object Model (DOM)来操作网页的结构和内容。
JavaScript是什么

JavaScript是什么JavaScript,也称ECMAScript,是一种基于对象和事件驱动并具有相对安全性并广泛用于客户端网页开发的脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言。
最早是在HTML上使用的,用来给HTML网页添加动态功能,由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题及响应用户的各种操作,为客户提供更流畅的浏览效果。
因为当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。
于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。
然而现在JavaScript也可被用于网络服务器,如Node.js。
一、javascript的组成一个完整的JavaScript 实现是由以下3 个不同部分组成的:ECMAScript:描述了该语言的语法和基本对象;文档对象模型(Document Object Model,简称DOM)):描述处理网页内容的方法和接口;浏览器对象模型(Browser Object Model,简称BOM)):描述与浏览器进行交互的方法和接口。
二、javascript的基本特点是一种解释性脚本语言(代码不进行预编译)。
主要用来向HTML 页面添加交互行为。
可以直接嵌入HTML 页面,但写成单独的js文件有利于结构和行为的分离。
三、javascript的特性不同于服务器端脚本语言,例如PHP与ASP,JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。
所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。
而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。
作为一个程序员,什么是脚本。必须要理解

作为⼀个程序员,什么是脚本。
必须要理解Javascript 是⼀门动态类型、⾯向对象的脚本语⾔。
对脚本进⾏⼀个感性的认识。
就是⼀个跟计算机执⾏的⽂本。
理解脚本如果你打开⼀本 JavaScript 教程,那么很可能在第⼀章就看到这句话:JavaScript 是⼀门动态类型、⾯向对象的脚本语⾔。
然⽽很多前端⼯作⼀年都不清楚这个脚本是什么意思。
其实脚本原本来⾃戏剧舞台,⽐如下⾯这个脚本:公馆⼀室内王妈:(⼩⼼翼翼地)⼩姐,您还是得注意⾝⼦,就吃点东西吧。
鸡⼩姐:(把碗砸在地上)不吃,我就是不吃。
(王妈下)脚本主要由⼈物对话和舞台提⽰组成。
演员和道具组只需要按照脚本说的做即可。
编程领域的脚本也是类似的,计算机只要照着脚本上说的做即可,⽐如下⾯这个脚本:cd ~/Desktopmkdir democd demoecho "hi" > index.htmlcd ~/Desktop所以说,脚本就是给计算机照着做的。
这是我们对「脚本」的⼀个感性认识。
接下来我们写⼀个脚本。
写⼀个脚本1. 找个地⽅新建⽂件,后缀随意,⼀般来说脚本的后缀是 .sh。
我喜欢把脚本放在 ~/local ⽬录⾥。
(我知道你没有这个⽬录,创建这个⽬录不就⾏了)1. mkdir ~/local2. cd ~/local3. touch demo.txt2. 编辑 demo.txt,内容如下:mkdir democd demomkdir css jstouch index.html css/style.css js/main.jsexit3. (Windows ⽤户请跳过这⼀步)给 demo.sh 添加执⾏权限chmod +x demo.txt4. 在任意位置执⾏sh ~/local/demo.txt即可运⾏此脚本1. cd ~/Desktop2. sh ~/local/demo.txt3. 你会看到当前⽬录⾥多出⼀个 demo ⽬录,demo ⽬录⾥⾯还有⼀些⽂件好了,这个 demo.txt 就是你写出的第⼀个 Bash 脚本了。
JavaScript简介

JavaScript简介⼀、简介Javascript,⼀种⾼级编程语⾔,通过解释执⾏,是⼀门动态类型,⾯向对象(基于原型)的直译语⾔。
它已经由欧洲电脑制造商协会通过ECMAscript实现语⾔的标准化。
它被世界上的绝⼤多数⽹站所使⽤,也被世界主流浏览器(Chrome、IE、FireFox等)⽀持。
JavaScript是⼀门基于原型、函数先⾏的语⾔,是⼀门多范式的语⾔,它⽀持⾯向对象编程,命令式以及函数式编程。
它提供语法来操控⽂本、数组、⽇期以及正则表达式等,不⽀持I/O,⽐如⽹络、存储和图形等,但这些都可以由它的宿主环境提供⽀持。
JavaScript虽与Java有很多相似性,但这两门编程语⾔从设计之初就有很⼤的不同,JavaScript的语⾔设计主要受到了Self(⼀种基于原型的编程语⾔)和Scheme(⼀门函数式编程语⾔)的影响。
在语法结构上它⼜与C语⾔有很多相似(例如if条件语句、while循环、switch语句、do-while循环等)。
⼆、组成部分⼀个完整的 JavaScript 实现是由以下 3 个不同部分组成的:核⼼(ECMAscript)、⽂档对象模型(Document Object Model,简称DOM)、浏览器对象模型(Browser Object Model,简称BOM)。
三、相关概念JavaScript程序是由若⼲语句组成的,语句是编写程序的指令。
JavaScript提供了完整的基本编程语句,它们是:赋值语句、switch选择语句、while循环语句、for循环语句、for each循环语句、do...while循环语句、break循环中⽌语句、continue循环中断语句、with语句、try…catch语句、if语句(if..else,if…else if…)。
四、基本特点Javascript就是适应动态⽹页制作的需要⽽诞⽣的⼀种新的编程语⾔,如今越来越⼴泛地使⽤于Internet⽹页制作上。
js教程文档
js教程文档JavaScript(简称JS)是一种脚本语言,通常用于向网页添加交互功能。
它是世界上最流行的编程语言之一,被广泛用于前端开发(网页开发)和后端开发(服务器端开发)。
JS教程文档旨在介绍JavaScript的基本语法、变量、数据类型、运算符、条件语句、循环语句等基础知识,以及它的常用特性和应用场景。
在开始学习JS之前,我们需要了解一些基本概念。
JavaScript是一种解释性语言,它不需要编译过程,只需在浏览器中运行即可。
它是一种面向对象的语言,支持封装、继承和多态等特性。
它还是一种弱类型语言,变量的数据类型可以随时改变。
学习JS的第一步是了解变量的基本概念和用法。
在JS中,变量用于存储数据,并且可以随时修改其值。
我们可以使用关键字var、let或const声明变量,并根据需要给其赋予不同的数据类型,如字符串、数字、布尔值等。
JS中的运算符与其他编程语言类似,包括算术运算符、赋值运算符、比较运算符等。
条件语句和循环语句也是JS中常用的控制结构,可以根据特定的条件来执行不同的代码块。
JS还有许多内置的函数和方法,用于对数据进行处理和操作。
例如,我们可以使用内置方法对字符串进行拼接、截取或搜索。
我们还可以使用内置函数来处理数字、数组、日期等不同类型的数据。
另外,JS还支持事件处理,这意味着我们可以在特定的事件发生时执行相应的代码。
例如,当用户点击按钮时,我们可以编写JS代码来改变页面的内容或执行其他操作。
JS是一门非常灵活和强大的编程语言,它可以与HTML和CSS配合使用,实现交互式的网页效果。
除了在网页开发中,JS还被广泛应用于移动应用开发、游戏开发、数据可视化等领域。
学习JS的最佳方式是通过实践,编写一些简单的程序来加深对其概念和语法的理解。
同时,我们还可以参考一些优秀的JS教程和在线文档,如MDN(Mozilla Developer Network)上提供的JS文档。
总结一下,JS是一门重要且广泛应用的编程语言,具有强大的功能和灵活性。
JavaScript简介
JavaScript简介
概念
之前我们学习了Html和CSS,其中Html是基础架构,CSS用来美化页面,而JavaScript则是实现网页动态效果的基石。
JavaScript是一种具有面向对象能力的、解释型的程序设计语言,更具体一点,它是被嵌入HTML网页之中的基于对象和事件驱动、并具有相对安全性的客户端脚本语言,因为它不需要在一个语言环境下运行,而只需要支持他的浏览器即可。
特点
1. 松散性
JavaScript语言核心与C、C++、Java相似,比如条件判断、循环、运算符等,但它却是一种松散类型的语言,也就是说,它的变量不必具有一个明确的类型。
2. 对象属性
JavaScript中的对象把属性名映射为任意的属性值。
它的这种方式很像哈希表或关联数组,而不像C中的结构体或者C++、Java中的对象。
3. 继承机制
JavaScript中的面向对象继承机制是基于原型的,这和另外一种不太为人所知的Self语言很像,而和C++一级Java中的继承大不相同。
JavaScript语言
JavaScript语言JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动。
使用它的目的是与HTML超文本标识语言、Java 脚本语言一起实现在一个网页中链接多个对象,与网络客户交互作用,从而可以开发客户端的应用程序。
它是通过嵌入或调入在标准的HTML语言中实现的。
一、脚本编写语言JavaScript是一种脚本语言,它采用小程序段的方式实现编程。
像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。
它的基本结构形式与C、C++、VB、Delphi十分类似。
但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。
它与HTML标识结合在一起,从而方便用户的使用操作。
二、基于对象的语言JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。
这意味着它能运用自己已经创建的对象。
因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
下面我们通过一个例子,编写第一个JavaScript程序。
通过它可说明JavaScript的脚本是怎样被嵌入到HTML文档中的。
test1.html文档:<html><head><Script Language ="JavaScript">// JavaScript Appears here.alert("这是第一个JavaScript例子!");alert("欢迎你进入JavaScript世界!");alert("今后我们将共同学习JavaScript知识!");</Script></Head></Html>说明:test.html是HTML文档,其标识格式为标准的HTML格式。
如同HTML标识语言一样, JavaScript程序代码是一些可用字处理软件浏览的文本,它在描述页面的HTML相关区域出现。
前端javascript的基本原理
前端JavaScript 的基本原理前端JavaScript 是在Web 开发中用于增强用户界面交互和动态性的编程语言。
它主要在用户的浏览器中运行,用于处理网页的各种交互和展示逻辑。
下面是前端JavaScript 的基本原理:1. 嵌入式脚本语言:前端JavaScript 是一种嵌入式脚本语言,它被嵌入到HTML 页面中,通过`<script>` 标签来引入。
浏览器在解析HTML 页面时,会执行其中的JavaScript 代码。
2. 事件驱动:JavaScript 可以响应用户的各种事件,如点击、输入、鼠标移动等。
通过注册事件处理函数,你可以指定在特定事件发生时要执行的操作。
3. DOM 操作:JavaScript 可以操作文档对象模型(DOM),这是浏览器提供的表示HTML 文档结构的接口。
通过DOM 操作,你可以动态地修改、添加或删除页面上的元素,实现页面内容的动态更新。
4. 异步编程:JavaScript 支持异步编程,通过回调函数、Promise 和async/await 等机制来处理异步任务,如网络请求、定时器等。
这使得页面能够在执行耗时操作时仍然保持响应性。
5. 数据交互:JavaScript 可以与服务器进行数据交互,包括发送AJAX 请求、获取JSON 数据、操作Cookies 和本地存储等。
6. 面向对象编程:JavaScript 是一种面向对象的语言,它支持对象的创建、继承和多态等特性。
你可以使用构造函数、类、原型链等来实现面向对象编程。
7. 模块化:JavaScript 通过模块化机制,使代码可以拆分为多个模块,提高代码的可维护性和复用性。
ES6 引入了模块化规范,使得代码可以被分割成多个文件,并按需导入。
8. 性能优化:前端JavaScript 代码在浏览器中运行,因此需要考虑性能问题。
减少不必要的DOM 操作、合并和压缩JavaScript 文件、使用浏览器缓存等都是优化性能的手段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaScript是一门面向对象语言简介:JavaScript函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为JavaScript不是一门面向对象的语言,或者只是部分具备一些面向对象的特征。
本文将回归面向对象本意,从对语言感悟的角度阐述为什么JavaScript是一门彻底的面向对象的语言,以及如何正确地使用这一特性。
前言当今JavaScript大行其道,各种应用对其依赖日深。
web程序员已逐渐习惯使用各种优秀的JavaScript框架快速开发Web应用,从而忽略了对原生Java Script的学习和深入理解。
所以,经常出现的情况是,很多做了多年JS开发的程序员对闭包、函数式编程、原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕。
这都是对原生JavaScript语言特性理解不够的表现。
要掌握好JavaScript,首先一点是必须摒弃一些其他高级语言如Java、C#等类式面向对象思维的干扰,全面地从函数式语言的角度理解JavaScript原型式面向对象的特点。
把握好这一点之后,才有可能进一步使用好这门语言。
本文适合群体:使用过JS框架但对JS语言本质缺乏理解的程序员,具有Java、C++等语言开发经验,准备学习并使用JavaScript的程序员,以及一直对JavaScr ipt是否面向对象模棱两可,但希望知道真相的JS爱好者。
重新认识面向对象为了说明JavaScript是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手,探讨一下面向对象中的几个概念:一切事物皆对象对象具有封装和继承特性对象与对象之间使用消息通信,各自存在信息隐藏以这三点做为依据,C++是半面向对象半面向过程语言,因为,虽然他实现了类的封装、继承和多态,但存在非对象性质的全局函数和变量。
Java、C#是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。
但这里函数本身是一个过程,只是依附在某个类上。
然而,面向对象仅仅是一个概念或者编程思想而已,它不应该依赖于某个语言存在。
比如Java采用面向对象思想构造其语言,它实现了类、继承、派生、多态、接口等机制。
但是这些机制,只是实现面向对象编程的一种手段,而非必须。
换言之,一门语言可以根据其自身特性选择合适的方式来实现面向对象。
所以,由于大多数程序员首先学习或者使用的是类似Java、C++等高级编译型语言(Java虽然是半编译半解释,但一般做为编译型来讲解),因而先入为主地接受了“类”这个面向对象实现方式,从而在学习脚本语言的时候,习惯性地用类式面向对象语言中的概念来判断该语言是否是面向对象语言,或者是否具备面向对象特性。
这也是阻碍程序员深入学习并掌握JavaScript的重要原因之一。
实际上,JavaScript语言是通过一种叫做原型(prototype)的方式来实现面向对象编程的。
下面就来讨论基于类的(class-based)面向对象和基于原型的(prototype-based)面向对象这两种方式在构造客观世界的方式上的差别。
基于类的面向对象和基于原型的面向对象方式比较在基于类的面向对象方式中,对象(object)依靠类(class)来产生。
而在基于原型的面向对象方式中,对象(object)则是依靠构造器(constructor)利用原型(prototype)构造出来的。
举个客观世界的例子来说明二种方式认知的差异。
例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。
这里的工程图纸就好比是语言中的类(class),而车就是按照这个类(class)制造出来的;另一方面,工人和机器(相当于constructor)利用各种零部件如发动机,轮胎,方向盘(相当于prototype的各个属性)将汽车构造出来。
事实上关于这两种方式谁更为彻底地表达了面向对象的思想,目前尚有争论。
但笔者认为原型式面向对象是一种更为彻底的面向对象方式,理由如下:首先,客观世界中的对象的产生都是其它实物对象构造的结果,而抽象的“图纸”是不能产生“汽车”的,也就是说,类是一个抽象概念而并非实体,而对象的产生是一个实体的产生;其次,按照一切事物皆对象这个最基本的面向对象的法则来看,类(class)本身并不是一个对象,然而原型方式中的构造器(constructor)和原型(prototype)本身也是其他对象通过原型方式构造出来的对象。
再次,在类式面向对象语言中,对象的状态(state)由对象实例(instance)所持有,对象的行为方法(method)则由声明该对象的类所持有,并且只有对象的结构和方法能够被继承;而在原型式面向对象语言中,对象的行为、状态都属于对象本身,并且能够一起被继承(参考资源),这也更贴近客观实际。
最后,类式面向对象语言比如Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态(static)属性和静态方法。
而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象(build-in object)外,不允许全局对象、方法或者属性的存在,也没有静态概念。
所有语言元素(primitive)必须依赖对象存在。
但由于函数式语言的特点,语言元素所依赖的对象是随着运行时(runtime)上下文(context)变化而变化的,具体体现在this指针的变化。
正是这种特点更贴近“万物皆有所属,宇宙乃万物生存之根本”的自然观点。
在程序清单1中window便类似与宇宙的概念。
清单1.对象的上下文依赖<script>var str="我是一个String对象,我声明在这里,但我不是独立存在的!" var obj={des:"我是一个Object对象,我声明在这里,我也不是独立存在的。
"};var fun=function(){console.log("我是一个Function对象!谁调用我,我属于谁:",this);};obj.fun=fun;console.log(this===window);//打印trueconsole.log(window.str===str);//打印trueconsole.log(window.obj===obj);//打印trueconsole.log(window.fun===fun);//打印truefun();//打印我是一个Function对象!谁调用我,我属于谁:windowobj.fun();//打印我是一个Function对象!谁调用我,我属于谁:objfun.apply(str);//打印我是一个Function对象!谁调用我,我属于谁:str</script>在接受了面向对象存在一种叫做基于原型实现的方式的事实之后,下面我们就可以来深入探讨ECMAScript是如何依据这一方式构造自己的语言的。
最基本的面向对象ECMAScript是一门彻底的面向对象的编程语言(参考资源),JavaScript是其中的一个变种(variant)。
它提供了6种基本数据类型,即Boolean、Numb er、String、Null、Undefined、Object。
为了实现面向对象,ECMAScript设计出了一种非常成功的数据结构-JSON(JavaScript Object Notation),这一经典结构已经可以脱离语言而成为一种广泛应用的数据交互格式(参考资源)。
应该说,具有基本数据类型和JSON构造语法的ECMAScript已经基本可以实现面向对象的编程了。
开发者可以随意地用字面式声明(literal notation)方式来构造一个对象,并对其不存在的属性直接赋值,或者用delete将属性删除(注:JS中的delete关键字用于删除对象属性,经常被误作为C++中的d elete,而后者是用于释放不再使用的对象),如程序清单2。
清单2.字面式(literal notation)对象声明var person={name:“张三”,age:26,gender:“男”,eat:function(stuff){alert(“我在吃”+stuff);}};person.height=176;delete person[“age”];在实际开发过程中,大部分初学者或者对JS应用没有太高要求的开发者也基本上只用到ECMAScript定义的这一部分内容,就能满足基本的开发需求。
然而,这样的代码复用性非常弱,与其他实现了继承、派生、多态等等的类式面向对象的强类型语言比较起来显得有些干瘪,不能满足复杂的JS应用开发。
所以ECMAScript引入原型来解决对象继承问题。
使用函数构造器构造对象除了字面式声明(literal notation)方式之外,ECMAScript允许通过构造器(constructor)创建对象。
每个构造器实际上是一个函数(function)对象,该函数对象含有一个“prototype”属性用于实现基于原型的继承(prototype-based inheritance)和共享属性(shared properties)。
对象可以由“new关键字+构造器调用”的方式来创建,如程序清单3:清单 3.使用构造器(constructor)创建对象//构造器Person本身是一个函数对象function Person(){//此处可做一些初始化工作}//它有一个名叫prototype的属性Person.prototype={name:“张三”,age:26,gender:“男”,eat:function(stuff){alert(“我在吃”+stuff);}}//使用new关键字构造对象var p=new Person();由于早期JavaScript的发明者为了使这门语言与大名鼎鼎的Java拉上关系(虽然现在大家知道二者是雷锋和雷锋塔的关系),使用了new关键字来限定构造器调用并创建对象,以使其在语法上跟Java创建对象的方式看上去类似。
但需要指出的是,这两门语言的new 含义毫无关系,因为其对象构造的机理完全不同。
也正是因为这里语法上的类似,众多习惯了类式面向对象语言中对象创建方式的程序员,难以透彻理解JS对象原型构造的方式,因为他们总是不明白在JS语言中,为什么“函数名可以作为类名”的现象。
而实质上,JS这里仅仅是借用了关键字new,仅此而已;换句话说,ECMAScript完全可以用其它非new 表达式来用调用构造器创建对象。
彻底理解原型链(prototype chain)在ECMAScript中,每个由构造器创建的对象拥有一个指向构造器prototype属性值的隐式引用(implicit reference),这个引用称之为原型(prototype)。