一、面向对象编程面向对象编程(OOP--ObjectOrientedProgramming)是一种以抽象方式创建模型的编程方法。继承、封装、多态是OOP的三个基本特征。很多主流编程语言都支持OOP。比如Java和C++都是用new来调用'class'来创建实例,但是学过JS的同学都知道JS中没有class的概念,那么JS是如何实现面向对象编程的呢?JS通过原型链实现OOP。原型链的概念在此不再赘述。只记得一个例子:function._proto_====Function.prototypeJS也是通过new来创建实例的,但是后面调用??的不是class,而是constructor。下面以封装和继承一个‘类’为例进行详细说明。2、ES5实现封装继承一个class1、封装我们知道宝马、奔驰、奥迪等都是汽车。汽车的概念是一个类,抽象出来代表日常生活中的很多具体事物。//Car构造函数Car(name,color){this.name=name;this.color=color;}2.原型模式car有很多属性,不仅仅是名字和颜色,如果都写在constructor,在创建实例的时候一个一个调用太麻烦,所以JS规定了原型模式,每个构造函数都有一个prototype属性指向原型,“类”中的一些公共属性可以放在prototype中。比如车型、动能等属性都是通用属性,可以放在原型中。Car.prototype.type='car';Car.prototype.getType=function(){returnthis.type;};Car.prototype.setType=function(newType){this.type=newType;returnnewType;};Car.prototype.getName=function(){returnthis.name;};Car.prototype.setName=function(newName){this.name=newName;返回新名称;};3.new关键字由JS实例中的new关键字创建。varcar1=newCar('宝马','红色');console.log(car1.type)//'car'在这里,我们思考一个问题:使用new创建一个实例,new到底是做什么的?使用new创建实例其实帮助我们减少了四行代码:1.new创建了一个临时对象,可以使用this访问2.new也帮助我们返回临时对象3.new指定原型的名字——prototype4.new创建一个实例并自动绑定原型。car1._proto_===Car.prototype4。继承我们实现了一个'子类',继承了'汽车类'函数SUV(price){Car.call(this,'suv');//Car类的属性和方法给SUV赋值this.price=price;}SUV.prototype=newCar('suv');//继承car类的原型链SUV.prototype.getPrice=function(){returnthis.price;};SUV.prototype.setPrice=function(newPrice){this.price=newPrice;returnnewPrice;};//创建子类实例varsuv1=newSUV(1000);console.log(suv1.getPrice());//1000多是JS中面向对象编程的简单介绍。如有错误,请指出。参考链接:Javascript继承机制的设计思想--阮一风JS中的new是做什么的?---方英航
