🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## JavaScript 语言:通过一种叫做 原型(prototype)的方式来实现面向对象编程 ### 1.万物皆对象 > **在基于类的面向对象方式中,对象(object)依靠 类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的。举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class),而车就是按照这个 类(class)制造出来的;另一方面,工人和机器 ( 相当于 constructor) 利用各种零部件如发动机,轮胎,方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。** * 对象是单个实物的抽象。 ~~~ 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 ~~~ * 对象是一个容器,封装了属性(property)和方法(method) ~~~ 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录动物的颜色\种类,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。 ~~~ ### 2.面向对象第一步:生成对象 * 典型的面向对象编程语言(比如 C++ 和 Java),都有“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例 * 而Javascript在es6之前没有类这个概念,Javascript使用构造函数来模拟Java中的类; 构造函数:eg: ~~~ var Person = function(name,age){ this.name = name; this.age = age; } ~~~ > 构造函数函数体内部使用了this关键字,代表了所要生成的对象实例。 > **生成对象时,必须使用new命令** eg: ~~~ var pi= new Person("xiaopi",19) ~~~ > 调用对象的属性 eg: ~~~ console.log(pi.name);//xiaopi console.log(pi.age); //19 ~~~ > **new命令的原理** * 使用new命令时,它后面的函数依次执行下面的步骤。 1.创建一个对象实例 2.实例化对象的原型指向构造函数的原型对象 3.将这个对象赋值给构造函数的this