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是让你的程序拥有弹性的强大武器,不可不理解,不可不用啊。
3-RRR并联机器人结构详解:从运动学到奇异点分析(附MATLAB仿真代码) 本文详细解析了3-RRR并联机器人的结构设计、运动学建模及奇异点分析,并提供了MATLAB仿真代码。通过对称性设计和可分析性,3-RRR结构成为教学与研究的理想对象。文章从基础杆件参数设置到奇异位形的实时捕捉,深入探讨了机构运动的数学本质,并分享了仿真调试中的实用技巧,助力工业自动化和精密控制应用。 阅读详情

相关推荐

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 588

Go语言爬虫系列教程:实战篇JS逆向实现优快云文章导出

本教程详细介绍了如何通过JS逆向工程实现优快云文章导出功能。首先,文章解释了JS逆向的概念及其在现代网站API保护中的重要性。接着,教程逐步分析了优快云的API请求机制,包括如何获取

Clown95 2541

关于自制的《航空学报》latex模板(非官网模板)

《航空学报》的官网只提供了word模板,并且该期刊投稿只需要pdf版本不需要源文件。为方便latex爱好者撰写论文,提供该模板及说明给广大科研人士~

qq_37105055的博客 4695

three.js从入门到精通系列教程035 - 创建SpotLight聚光灯光源和辅助线

【代码】three.js从入门到精通系列教程035 - 创建SpotLight聚光灯光源和辅助线。

深南大道 642

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

Node.js入门教程合集

Node.js是一个特殊的后端服务框架,一个用前端语言写后端功能的框架。无论你是做前端还是后端的程序员,都应该接触Node.js,因为它会给你技术栈上的互补,甚至启迪你的思维方式。 介绍 Node.js本质上是使用Google的V8引擎制作出来的服务框架。V8本身是Google为了解决Chrome浏览器的性能问题而制作的前端引擎(开源)。本身依托于浏览器引擎,这也是为什么Node.js使...

Hi-Jimmy 993

altium room 布局_ALtium 16相同重复模块PCB布局,复制布局走线

自己做了实际工程以后发现PCB器件名字后缀太长了,所以文章最后写了一下后缀的调整方法。第一种方法:1、建立子原理图如下,文件名CANM 2、之后新建一个顶层文件,文件名TOP,之后design—create sheet symbol form sheet or hdl。选择CANM,并放置到TOP中,如下 3、由于我们要多次调用CANM所以使用repeat命令修改如下: 4、之后根据自己的定义,连...

weixin_39609573的博客 5751

代码高亮插件——wangHightLighter.js——demo演示

wangHighLighter.js demo 语言:   主题: 转换   说明: wangHightLighter.js是一个可以将代码高亮显示的javascript小插件,支持常用的20多语言、多个漂亮的主题。代码开源。 使用说明 & 下载:https://github.com/wangfupeng1988/wangHighLighter   -----...

weixin_33697898的博客 206

TCP报文 Flood攻击原理与防御方式

TCP交互过程中包含SYN、SYN-ACK、ACK、FIN和RST报文,这几类报文也可能会被攻击者利用,海量的攻击报文会导致被攻击目标系统资源耗尽、网络拥塞,无法正常提供服务。接下来我们介绍几种常见的Flood攻击的原理和防御方式。

qq_32044265的博客 4219

【雕爷学编程】Arduino动手做(45)---红外光电避障传感器模块4

雕爷学编程,Arduino动手做,开源硬件,创客传感器,红外光电避障传感器模块

雕爷学编程 2503

JavaScript 系列教程 I JavaScript 简介

笔记来源于对现代 JavaScript 教程的学习,可以上网搜索,这个教程很有名。JavaScript 写出来的程序被我们称之为“脚本”它可以被执行在任何的网页当中,所以 JavaScript 是一门可以用于网页开发的语言,在开发我们的网页的时候可以直接编写 JavaScript 的代码,在网页打开的时候 JavaScript 的代码就会自动执行。至于为什么叫做 JavaScript,很简单:就是为了蹭 java 的热度而已。

2401_89317650的博客 703

Matlab安装硬件支持包、simulink离线安装硬件支持包安装,离线安装ESP32、stm32等安装包,Are you up-to-date on SoftWare Maintenance?

注意:如果提示出现“没有可从此位置安装的兼容支持包后,这个问题,请查看步骤5,是不是没有按照步骤5进行操作.一般情况下出现“没有可从此位置安装的兼容支持包”后,重新安装选择了默认路径就可以成功。如果不是很清楚,直接安装在默认的文件夹下面,即使这个文件夹下没有matlab相关的文件夹,也要这么下载,没有为什么,切记尽量按默认路径安装,更改下载的路径不成功,别怪我没提醒。:下载到哪里非常重要,如果下载的不是默认的路径下,就需要将其中这个的是这个archives文件夹,连同其他文件一并要复制出来,拷贝到。

pvmsmfchcs的博客 1746

学习C,C++,Java,Python,C#,HTML,JS,SQL Server等一系列前端和后端语言很好的新手教程网站

发现一个新手教程网站,学习C,C++,Java,Python,C#,HTML,JS,SQL Server等一系列前端和后端语言,很清楚很详尽: https://www.runoob.com/ 或者搜索菜鸟教程都可以。 ...

vesard的博客 621

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript系列(1)--启程

JavaScript之旅第一站

欢迎来到这里,希望文章能对你有所帮助 1501

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

百套易语言教程、易语言视频教程【易语言编程入门教程】

百套易语言教程、易语言视频教程【易语言编程入门教程】百套易语言教程、易语言视频教程【易语言编程入门教程】

dhyuan_88的博客 289

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最新巫妖易语言post-js逆向教程

2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【2020.6.4】直播录像 2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【2020.6.5】直播录像 2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【5.15】上课须知 2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【5.18】易语言使用须知 2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【5.19】易语言界面 2020年5月最新巫妖易语言-js逆向-安卓逆向hook教程-【5.

qq_55925296的博客 667

JavaScript · 学习目录

JavaScript JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的 JavaScript 片段添加到网页中。 ...

Mr_Duoduo的博客 374

易语言0基础多久可以学出来 易语言多久能学会上手入门

易语言辅助教程(爱易编程论坛讲师 24课+讲师:远航 9课+爱易编程论坛讲师:爱易、小Call 8课).rar 时光论坛易语言全套教程【易语言零基础+易语言抓包+易语言填表】完整版.rar 易语言JS视频教程150集.rar 易语言组件、支持库.rar。易了千名DNF游戏辅助系列VIP教程.rar 中华隐士联教程.rar 易语言制作挂初级.rar 易语言智能辅助开发教程.rar 易语言写成吉思汗辅助全套课程(1-20课).ra。百套易语言教程、易语言视频教程【易语言编程入门教程】

dhyuan_88的博客 195

JavaScript教程大纲

因为考虑到Python的接受难度,改为推广较为简单和流行的JavaScript。先列主要参考资料:           JavaScript权威指南(第6版):http://book.douban.com/subject/10549733/           JavaScript高级程序设计:http://book.douban.com/subject/10546125/

restart 1656

22 种语言的项目式编程教程清单:如何从 0 到 1 搭出自己的第一个项目

项目式编程教程清单 Project Based Learning 收录了 22 种编程语言的实战教程,标准只有一个:学完你能交出一个完整、能跑的成品。照着做,从空文件一路搭出解释器、聊天应用、Web 后端或小游戏,而不是只记住一些 API。 整个仓库是纯 Markdown,不需要装任何环境。语言各占一个小节,Python、JavaScript、C/C++、Go、Rust、Lua 等 22 个分类

gitblog_00969的博客 940

JavaScript语言学习

JavaScript学习传送门 JavaScript入门:http://es6.ruanyifeng.com/ JavaScript标准:https://wangdoc.com/javascript/ 《JavaScript语言精粹(修订版)》: http://item.jd.com/11090963.html...

u010418130的专栏 209

项目制教程完整指南:22种语言从零构建真实应用

project-based-learning 收录"从零构建应用"的开源项目制教程,按 22 种编程语言分区组织,适合初中级开发者通过做真实项目练手。 ## 📚 项目概览:一份实战教程课程表 - 收录标准严格:教程须免费、无付费墙,跟完能产出可运行的完整成果,纯概念讲解不收。 - 覆盖 22 个语言分区:C/C++、Rust 等系统语言,JavaScript 前端,Go 后端,Python

gitblog_00890的博客 208

准备翻译Windows 8 动手实验系列教程

Windows 8动手实验教程(http://msdn.microsoft.com/zh-cn/windows/apps/jj674832.aspx)包含了一个系列的 8 个动手实验模块,将为您提供 Contoso Cookbook 开发的全程指导,Contoso Cookbook 是一个真实存在的 Windows 应用商店应用程序,其中引入了 Windows 8提供的多项重要的新功能。您将学会如...

weixin_30787531的博客 109

IDE-DevExpress-JavaScript-JS Framework-Xml处理-Windows Media Player-Components And UI Application Block优秀文章、资料推荐

JavaScript部分:javascript this用法总结 JavaScript函数 JavaScript面向对象的支持JS Framework部分:script.aculo.us开发系统教程 script.aculo.us快速入门 基于script.aculo.us的UI库IDE部分:Aptana使用入门 Aptana概述 A

~飞 鸟 (*^__^*) 天 堂~ 1192

转:深入理解javascript原型和闭包教程(完结)

作为一个菜鸟,只看了w3c基础教程的小编,真的太喜欢这个系列了, 最近迷上了TamperMonkey, 还是得多学习javascript 出处: http://www.cnblogs.com/wangfupeng1988/p/3977924.html 说明:   该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言...

IT门外汉jackie的博客 250
上一篇: 模型及其他
下一篇: JavaScript语言教程
lifeNet
博客等级 码龄20年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值