`
- 浏览:
57228 次
- 性别:
- 来自:
长沙
-
JavaScript简介
通常,现代的Web可以划分为三大元素:CSS、HTML,当然还有JavaScript,这基本上可以说是一种模块化的思想:我们用CSS来使我们的页面对得起观众,我们用HTML让网页言之有物,而JavaScript让我们的页面看起来生动,也即功能的实现。这种JavaScript我们称之为不唐突的JavaScript。
JavaScript,顾名思义,是一种script language(脚本语言),当然,它和Java并没有一毛钱的关系,这个只是NetScape(网景)公司市场部的馊主意,为了提高这门语言的知名度,单相思地改为了JavaScript,但是我不明白,在JavaEye更名为ITEye之后,JavaScript为什么不更名为ITScript 。这个名字的一个后果就是很多刚入门学Java的同学在图书馆会拿上一本JavaScript的书,一不小心就误入歧途了(或许这正是市场部希望看到的)。好吧,回到JavaScript的定义上来,它是一门跨平台、基于原型的面向对象的脚本语言(什么是基于原型的面向对象语言等会解释),这也是JavaScript的一大优势。当然,很多书本和论坛都会强调JavaScript是一种弱类型的语言,也就是说变量可以在不声明的情况下使用,这是因为JavaScript不像Java那样需要通过编译才能运行,它是通过解释器解释后运行的,因此JavaScript也是解释性语言,它的变量会在解释器工作时进行数据类型检测。(莫非JavaScript的老爸才是李刚,这么嚣张,竟然可以不事先声明变量的类型,而且也不用更换名字)。JavaScript的合法定义或许应该这么说:JavaScript是一门弱类型、基于原型的面向对象的、解释性的脚本语言。它的语法和Java等语言类似,运行环境一般是web浏览器。
JavaScript中的对象
对象,相信接触过Java、C#等OOP语言的同志都明白,说来说去,就是由属性和方法组成的嘛。这里不展开讲我对对象的理解了,就JavaScript论JavaScript的对象吧还是。
我们一般将JavaScript中可操作的对象划分为两种:一种是JavaScript的核心对象(数组对象、日期时间对象等),另一种是JavaScript宿主环境定义的各种对象。或者,可以从广义上讲,JS中都是对象,管你function还是其它什么玩意,统统看成对象,这就是人们常说的万物皆是对象。
一般说来,JavaScript的核心对象(又称内置对象)有以下八种:
◎Array对象:用来表示数组的对象;
◎Boolean对象:用以支持布尔值;
◎Date对象:时间日期对象;
◎Math对象:用以支持一些常用的数学函数;
◎Function对象:函数支持对象;
◎String对象:字符串对象;
◎Number对象:提供对数字支持的对象;
◎RegExp对象:正则表达式对象;
以上八种核心对象,除了Math之外,其它七种JavaScript都提供了具有构造器功能的一个实例化机制(有些观点认为那就是构造器,因为可以通过它们new出这些对象,比如date = new Date(),但是我认为这只是具有构造器的功能而已,它们还是有区别的,最显而易见的区别就是我们可以date = new Date;这样来创建一个对象,此时,就不能说这是一个构造函数了)。当然,和大多数的语言一样,Math都是直接调用其中的方法的,这就不难理解了。
而用户自定义的对象就是通过定义一个函数来创建对象。这时,就得讨论function(函数)的对象化能力了(有一种观点认为在JS中,只有object和function才具有对象化的能力)。函数具有对象的特征,比如:
function dog(){
this.name = "Snoopy";
this.age = 5;
this.bark = function(){alert("Wow wow");}
}; // end dog
dog1 = new dog(); // 创建一个dog对象
从这个实例可以看出,这个函数dog具有属性和方法,是不是又可以对其进行实例化呢。此时,又有好事者指出,这个不就像Java中的构造器吗?好吧,如果你认为这样有利于记忆和理解的话。但是,需要记住的是,函数可以动态的为对象增加或删除属性和方法,这些属性可以是对象。
其实,我们根本没有必要纠结于一些名词,什么构造器、实例化机制啊,都只是一些表象,看到事物的本质才是关键,西藏有一个大喇嘛曾经说过:迷惑我们的不是事物本身,而是我们本身对事物的执着。也许,在看清了本质后就会发现,程序也不就是人类的思想+计算机的语言吗,那些C、C++、Java、C#、PHP等等各种计算机语言都是人类一种对计算机的抽象思维的具象表达。而且,过分地关注那些表面的东西很容易让我们变得浮躁从而无法接近事物的真相。
JavaScript中的对象表示方法
JavaScript中,常用的对象表示方法有两种,一种是比较熟悉的new,还有一个就是JSON。想必new一个对象大家伙是很在行的,比如在上面的例子中,我们就是通过new关键字来创建一个dog对象的。
这里着重讲另外一种很有用的对象表示法——JSON,其英语全称是JavaScript Object Notation,也即JavaScript对象表示法。JSON是一种轻量级的数据交换语言,是对象的一种序列化表示形式,简洁而明了,而JSON字符串是通过eval引擎转化为JS对象的。它的基本格式是:
var object = {
property1: pro1, // 属性1
property2: pro2, // 属性2
function1: fun1, // 函数1
function2: fun2 // 函数2
};
当然,我们还可以嵌套使用这种对象定义方式:
var object1 = {
property1: pro1,
function1: fun1,
object2: {property2: pro2, function2: fun2}; // 嵌套定义
};
这种JS对象声明方法相对来说比较易懂清晰。但是也有一个缺点:缺乏灵活性。这也算是JSON的美中不足之处吧。
JavaScript的面向对象特性
首先声明,我也是接触JavaScript才知道面向对象编程还分为两种:基于类的面向对象编程和基于原型的面向对象编程。像Java、C#这种属于基于类的面向对象语言,而JavaScript则属于基于原型的面向对象语言。
基于类的面向对象语言包括两个基本概念:类和实例。类是一个很抽象的概念,简单说是具有相同属性和近似功能的事物的一种归约。而实例就是类的一个特例,即类的一个具体对象。而在基于原型的面向对象语言中,只有一个概念,那就是对象,它还有一个很重要的概念——原型对象。
原型的概念需要重点强调。原型这个概念,相信大家接触过,以前学习语文课本中的小说时,经常会说主人公是以谁谁谁为原型的,小说的主人公B是以现实中A为原型,那么就说明B具有A的一些性格或经历。其实,从语义上,这两个原型是相通的,只是JavaScript原型得更彻底,JavaScript中,如果A是B的原型,那么B将具有A的所有属性和方法。JavaScript中的每一个对象都拥有一个原型对象作为参照对象,而且每一个函数有一个prototype属性,然后通过该属性引用原型对象。其实,原型对象就是一个对象模板。原型对象相对于类进行实例化具有一个很明显的优势——节省内存开销,我们知道,我们在用类实例化一个对象时,不管你用不用某个属性,它总是存在的,而当通过使用prototype,我们并不会在创建一个对象时将属性和方法附加在对象上,而是在对象调用某个属性或方法时,再去检测该对象是否具有所调用的属性或方法。
一般地,基于类的面向对象语言都具有三大特点:继承、封装以及多态。这些特征相信接触过Java或C++等面向对象语言的读者应该很清楚,不少人甚至将这些作为判断一种编程语言是否是面向对象语言的标准,但是这些仅仅是基于类的面向对象语言的特征而已,在JavaScript中,这三者只有继承独活于世了。没有类,怎么实现继承?我想,我们是时候突破类的限制了,n年前,我们的祖先的祖先类人猿正是因为突破了类的限制——直立行走,才让今天的我们可以淡定地取笑着敲代码的程序猿。没有类,我们还有原型不是吗?是的,我们就是通过原型链接来实现JavaScript中的继承的。先看看下面的代码吧:
// 定义一个Animal
function Animal(){
this.name= "";
this.age = "";
} // end Animal
// 定义一个Dog
function Dog(){
this.bark = "Wowwow";
} // end Dog
// 通过原型实现继承
Dog.prototype = new Animal();
// 创建一个Dog对象
var dog = new Dog();
// 打印dog对象具有的属性
for(var obj in dog){
document.write("属性:", obj);
} // end for
这段代码的运行结果是:
name
age
bark
Dog通过原型从Animal那里继承了Animal的两个属性,看看,这不也是继承吗?当然,方法也是可以继承的。这就是JavaScript的继承,相信理解了这个,也就不难明白为什么JavaScript也是面向对象语言了。
希望通过以上的阐述,大家已经对JS的面向对象特性以及JS的一些特点有了一些理解。理解了JS的一些基本真相,对于JS的深入学习相信也是大有裨益的。由于本人能力有限,文中难免会有疏漏之处,望大家不吝指正,在此先行谢过了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
内容概要:本文深入剖析了安川MP7系列工业控制系统的关键源码,重点介绍了运动轨迹规划、通信协议处理以及故障处理机制等方面的技术细节。通过对实际代码片段的解读,揭示了该系统在硬件寄存器直接访问、特殊功能码处理等方面的独特之处。同时,文中还分享了一些基于实践经验得出的重要参数设置及其背后的故事,如特定摩擦补偿系数的选择原因等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对安川产品有一定了解并希望深入了解其内部工作机制的专业人士。 使用场景及目标:帮助读者掌握安川MP7系列控制器的工作原理,提高对类似系统的维护能力和故障排查效率。对于想要进一步研究或二次开发该系统的开发者来说,也能提供宝贵的参考资料。 其他说明:文章不仅限于理论讲解,还包括了许多来自一线的实际案例和经验教训,使读者能够更好地理解和应用所学知识。
自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_
嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip
嵌入式八股文面试题库资料知识宝典-C语言总结.zip
内容概要:本文详细探讨了风储直流微电网中母线电压控制的关键技术。首先介绍了风储直流微电网的背景和发展现状,强调了母线电压控制的重要性。接着阐述了永磁风机储能并网技术,解释了永磁风机如何通过直接驱动发电机将风能转化为电能,并确保与电网的同步性和稳定性。然后深入讨论了双闭环控制MPPT技术,这是一种通过内外两个闭环控制系统来实现实时调整发电机运行参数的技术,确保风机始终处于最大功率点附近。最后,文章探讨了储能控制母线电压平衡的方法,即通过储能系统的充放电操作来维持母线电压的稳定。结论部分指出,通过这些技术的有机结合,可以实现对风储直流微电网的有效管理和优化控制。 适合人群:从事新能源技术研发的专业人士、电气工程研究人员、风电系统工程师。 使用场景及目标:适用于希望深入了解风储直流微电网母线电压控制策略的研究人员和技术人员,旨在帮助他们掌握最新的控制技术和方法,以提高系统的稳定性和效率。 其他说明:文章还对未来风储直流微电网的发展进行了展望,指出了智能化和自动化的趋势,以及储能技术的进步对系统性能的影响。
嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip
内容概要:文章详细介绍了HarmonyOS的目录结构及其重要性,从整体框架到核心目录的具体功能进行了全面剖析。HarmonyOS凭借其分布式架构和跨设备协同能力迅速崛起,成为全球操作系统领域的重要力量。文章首先概述了HarmonyOS的背景和发展现状,强调了目录结构对开发的重要性。接着,具体介绍了根目录文件、AppScope、entry和oh_modules等核心目录的功能和作用。例如,AppScope作为全局资源配置中心,存放应用级的配置文件和公共资源;entry目录是应用的核心入口,负责源代码和界面开发。此外,文章还对比了HarmonyOS与Android、iOS目录结构的异同,突出了HarmonyOS的独特优势。最后,通过旅游应用和电商应用的实际案例,展示了HarmonyOS目录结构在资源管理和代码组织方面的应用效果。; 适合人群:具备一定编程基础,尤其是对移动操作系统开发感兴趣的开发者,包括初学者和有一定经验的研发人员。; 使用场景及目标:①帮助开发者快速理解HarmonyOS的目录结构,提高开发效率;②为跨设备应用开发提供理论和技术支持;③通过实际案例学习资源管理和代码组织的最佳实践。; 其他说明:HarmonyOS的目录结构设计简洁明了,模块职责划分明确,有助于开发者更好地管理和组织代码和资源。随着万物互联时代的到来,HarmonyOS有望在开发便利性和生态建设方面取得更大进展,吸引更多开发者加入其生态系统。
内容概要:本文详细介绍了飞轮储能充放电控制的Simulink仿真模型,重点在于采用永磁同步电机的矢量控制和dq轴解耦控制策略。充电时,外环控制转速,内环控制dq轴电流;放电时,外环控制直流母线电压,内环同样控制dq轴电流。文中还讨论了硬件与软件环境的选择,以及仿真模型的调试与运行情况,最终得出该模型具有良好的跟随性能和波形完美度。 适用人群:从事电力电子系统、储能技术和Simulink仿真的研究人员和技术人员。 使用场景及目标:适用于需要对飞轮储能系统进行深入研究和仿真的场合,旨在提高充放电效率和稳定性,满足不同应用场景的需求。 其他说明:该仿真模型已调试完成,可以直接用于进一步的研究和实际应用,为未来的飞轮储能技术研发提供了有价值的参考。
嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip
嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip
1_15套python PDF格式.zip
内容概要:本文详细介绍了三相三电平整流器的仿真过程及其性能分析。文中首先概述了三相三电平整流器的基本概念及其在电力系统中的重要作用,接着重点探讨了电压电流双闭环控制方式的工作原理和优势,以及SPWM调制技术的具体应用。通过仿真文件展示了整流器在不同条件下的响应情况,验证了这两种技术的有效性和优越性。最后,作者表达了对未来实际应用的期望。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力控制系统感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解三相三电平整流器工作原理和技术细节的研究人员;目标是在理论基础上掌握电压电流双闭环控制和SPWM调制的实际应用方法。 其他说明:本文提供的仅为仿真文件,未涉及实物实验数据。
嵌入式八股文面试题库资料知识宝典-恒光科技.zip
嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip
嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip
Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。
嵌入式八股文面试题库资料知识宝典-朝歌数码.zip
嵌入式八股文面试题库资料知识宝典-Cortex系列.zip
嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip
内容概要:本文详细介绍了自适应巡航(ACC)控制和纵向跟车避撞控制的分层式控制策略。上层控制通过建立离散跟车运动学模型和基于反馈校正的跟车预测模型,获得期望加速度;下层控制则根据上层提供的数据计算期望制动压力和节气门开度。文中特别强调了引入松弛因子进行多目标优化求解,以及利用模糊控制动态调整权重系数的方法,如车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar。通过这种方式,系统能够在复杂多变的道路环境中保持灵活性和稳定性。仿真结果显示,在前车以50~70km/h的正弦速度变化行驶的情况下,自车能够平稳跟车,各项参数变化平稳。 适合人群:从事智能车辆研究的技术人员、自动驾驶领域研究人员、高校相关专业师生。 使用场景及目标:适用于智能车辆系统的设计与开发,特别是需要提升ACC系统性能的研究项目。目标是提高驾驶的安全性、舒适性和经济性。 其他说明:实验基于Matlab/Simulink 2021a和Carsim 2019.0版本完成,提供了完整的运行视频和参考资料。