鉴于前两篇文章已经把JavaScript中两个重要的知识点闭包和对象的引用讲了,所以这一节中将面向对象就容易理解多了,如果有其他面向对象的基础就更好不过了,那JavaScript的面向对象就是小case啦。当今 JavaScript 大行其道,各种应用对其依赖日深。web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解。所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包、函数式编程、原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕。这都是对原生 JavaScript 语言特性理解不够的表现。要掌握好 JavaScript,首先一点是必须摒弃一些其他高级语言如 Java、C# 等类式面向对象思维的干扰,全面地从函数式语言的角度理解 JavaScript 原型式面向对象的特点。把握好这一点之后,才有可能进一步使用好这门语言。闲话少说,进入正题。
1.什么是面向对象?
相信大家在看这篇文章之前一般多少都会点面向对象的语言,类似于C++\Java\C#等等这些基于类实现面向对象的语言。我也看过一些JavaScript书中描述的面向对象有些描述确实很学术,读完过后感觉没读一样,什么还没有讲一些高级特性都出来了,读的云里雾里,其实有些我也都不懂,只看了个大概。但是如果大家用日常生活的思维去理解这些晦涩难懂的概念,然后结合代码去理解这些抽象的东西个人感觉会很轻松的掌握这些概念。
在我个人理解:面向对象就是用什么工具(对象)做什么事情(功能),然后做事情(方法)的过程中,需要什么原料(属性),该怎么做(抽象、封装),用什么方法去做(继承)?如何去做的更好?(多态)。
2.面向对象的特点?
和其他的面向语言一样,JavaScript面向对象也有一下几个特征:
1. 抽象(问题的核心部分)
2. 封装(只能通过对象访问方法,我的工具别人先不能用)
3. 继承(从已有对象上继承出新的对象,工具也可以做其他事情,进行工具的有效利用)
4. 多态(多个对象的不同形态,工具的不同利用方法,做这件事情可能是一个角色,做下一件事情可能是充当其他角色)
var arr = new Array();//声明数组对象
arr.push('1');//向数组对象中添加点数据
arr.sort();//然后再进行排序
上面代码就是向数组中添加点数据,然后实现了排序这个功能,可以用面向对象的思维体会下。
3.对象中都有哪些东西呢?
JavaScript是一种弱类型的语言,没有Class这样的东东,我们可以理解函数就是Class的有效替代。而对象中含有两样东西:
a.属性(有的人称为‘字段’)
var arr = new Array(); //创建对象
arr.number = 99 ; //给对象添加属性
alert(arr.number); //看看我们添加的属性
b.方法
var arr = new Array();
arr.number = 99 ;//对象的属性
alert(arr.number);
//给对象添加方法
arr.showNumber = function(num){
alert(num);
}
arr.showNumber(9999);
//另外一种方法创建对象,同时给对象添加属性和方法
var person = {
name:'Brendan Eich',
doWhat:function(){
alert('Writing JavaScript Language!!!');
}
};
alert(person.name);
person.doWhat();
注意:有很多人区分不了方法和属性,这里有个小技巧。区别属性和方法的方法:如果一个名字后面没有括号可以认为是属性,如果有括号可以认为是方法。
这一节就这么多内容了,还是挺轻松的,如果有时间其实可以抽象一下现实世界中的事物,然后联想下JavaScript中的对象,可以提高我们的分析能力。