最开始接触面向对象的时候,一直搞不懂面向对象到底是什么,它和面向过程又有什么区别。
后来整理出来一些知识点,拿出来给大家分享:
首先我们来说面向过程和面向对象的区别:
面向过程呢,就是说把一个项目,按照特定的顺序,从头到尾一步一步的去实现什么,后做什么,直到结束。整个过程十分注重过程。而面向对象,就是说,把一个项目分成很多个小的项目,每一个小的项目又各自负责着自己的功能,最后由他们组合成为一个整体。说完这些,应该对面向对象有个初步的认识,下面我们再来看些细节。
先从创建对象开始:
在这里我们创建了一个对象,名字是张三,年龄是100,看起来没什么问题。但是如果说我们要创建多个对象呢,那怎么办?那我们可以写多个,如下图:
但是这样,代码重复量太多,会造成代码冗余。
于是我们用工厂模式来解决代码冗余的情况,也就是函数封装解决:
Function createPerson (name,age) {
var person1 = new Object ();
person1 . name = name;
person1 . age = age;
person1 . showinfo = function () {
return ‘ 我的名字是:’ + person 1 .name + ‘ 我的年龄: ’ +person.age;
}
return person1 ;
}
console . log ( CreatePerson ( ‘ zhangsan ’ , 100 ) . name) ;
这样看来是已经解决了,但是,工厂模式也不是十全十美的,通过测试发现,它并不能识别对象的类型,对象来自于var person1 = new Object (); 它根本不像数组或日期对象,有自己的名字。
于是,我们又采用构造函数的方式来解决。首先,什么是构造函数?简单一句话就是,首字母大写,new 运算符调用。
但是构造函数内部的属性和方法是私有的,每一个对象上面的方法使用的时候都会重新创建,这样的话就会影响性能,属性可以选择使用构造函数,但是方法不行,这样看来,构造函数只是解决了一半。
于是我们就有了prototype 属性。这是系统提供的原型属性,每一个函数下面都有一个原型属性,里面放置的是共有的属性或方法。如下图:
所以面向对象开发也叫混合开发,也就是用构造函数加原型的方式开发。—逆战班