javascript面向对象编程?js面向对象编程思想
今天给各位分享javascript面向对象编程的知识,其中也会对js面向对象编程思想进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
如何快速掌握JavaScript面向对象编程
导读经常看到一些 JavaScript的代码脏乱得无法理解到处都是属性和方法或者一个循环套著一个循环但如果使用面向对象就能很好的理清代码并方便理解和修改代码如果你不希望自己的代码只有上帝理解的话就请尽量考虑使用面向对象的模式
译文正文
到处都是属性方法代码极其难懂天哪我的程序员你究竟在做什么?仔细看看这篇指南让我们一起写出优雅的面向对象的 JavaScript代码吧!
作为一个开发者能否写出优雅的代码对于你的职业生涯至关重要随着像Node js这类技术的发展你甚至可以在服务器端使用JavaScript了同样的你也可以使用JavaScript来控制MongoDB的持续数据存储
文本标记
文本标记只是JavaScript里创建对象的一种方法当然这里肯定不止这一种但它是你在只打算创建一个对象实例时的首选方法
var bill={}
上面的代码并不实用它只是一个空对象接下来我们动态地向这个对象中添加一些属性和方法
bill name=“Bill E Goat”
bill sound= function(){
console log( bahhh!)
}
这里添加了属性name并且给它分配了值“Bill E Goat”我们并不需要先创建一个空对象而可以把所有代码直接写在一对括号里
var bill={
name“Bill E Goat”
sound function(){
console log( bahhh!)
}
}
是不是很美观?访问它的属性和方法就像呼吸一样简单自然
bill name//“Bill E Goat”
bill sound()//“bahhh”
如果属性名不是一个合法的标志符我们还可以这样访问它
bill[ name ]//“Bill E Goat”
注意我在调用方法时在其后添加了圆括号现在我们再重写一下当前的sound方法并添加一个参数
bill sound= function(noise){
console log(noise)
}
bill sound(“brrr!”)//“brrr!” He s cold)
很好我们已经传入参数了并且在方法定义中访问了它接下来向对象中增加一个新方法来访问name属性
bill sayName= function(){
console log(“Hello“+ this name)
}
bill sayName()//“Hello Bill E Goat”
我们可以使用this propertyName(在本例中即this name)在方法内访问属性
bill sayName// function
javascript的面向对象的编程介绍书籍有哪些
推荐两本javascript面向对象的编程书籍:
《面向对象的Javascript》(Object-Oriented JavaScript)
《Javascript高级程序设计(第二版)》(Professional JavaScript for Web Developers, 2nd Edition)
关于javascript的其他书籍,找了资料分享一下:
入门级,也适合想掌握一些前端技能的非前端工程师.
<JavaScript Dom编程艺术>
成为一名合格的前端工程师
<JavaScript高级程序设计>(或<JavaScript权威指南>)
<精通JavaScript>
更优秀的代码,更优良的设计
<JavaScript语言精粹>
<JavaScript设计模式>
从语言细节到复杂工程实践,想开发靠谱的各类底层代码,应该看看
<Secrets of the JavaScript Ninja>
<JavaScript Patterns>
<ECMA-262 in Detail>
应该重视跟踪阅读一些大牛们的Blog了
一直在等待:<一本JavaScript语言作者或引擎实现者写的书>
各类专题书籍,读好第二批次书籍之后,有精力就接触下
<高性能网站建设指南>
<高性能网站建设进阶指南>
<高性能JavaScript>
<Ajax实战>
<JQuery实战>
<精通CSS>(或<CSS权威指南>)
<正则表达式必知必会>(或<正则表达式权威指南>)
应该选择:<一本HTML5方面的书>
应该选择:<一本NodeJS方面的书>
最后的叮嘱:
学习要循序渐进,一步一个脚印,如果想学,不是买了书就完了,要认真看!
如何理解并学习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指针的变化。正是这种特点更贴近“万物皆有所属,宇宙乃万物生存之根本”的自然观点。
文章到此结束,如果本次分享的javascript面向对象编程和js面向对象编程思想的问题解决了您的问题,那么我们由衷的感到高兴!