js 原型和原型链

大纲

  1. 类和对象
  2. 面向对象思想概述
  3. 原型
  4. 原型链
  5. 继承
  6. 设计模式

1. 类和对象

1.1 什么是类?类和对象的关系

万物皆对象。
类是一种抽象的,并不实际存在的,表示一种事物共有特征的描述。
对象是一种具体的,实际存在的,类中的某一个个体。

1.2 类的创建

构造函数:可以通过new命令,生成对象的函数称为构造函数。构造函数一般首字母大写。

 function Car(lun1,lun2,lun3,lun4,ability){
   
          this.lun1 = lun1;
          this.lun2 = lun2;
          this.lun3 = lun3;
          this.lun4 = lun4;
          this.ability=ability;
      }
      var car1 = new Car('左前轮1','右前轮1','左后轮1','右后轮1','能跑1');
      var car2 = new Car('左前轮2','右前轮2','左后轮2','右后轮2','能跑2');
      console.log(car1);
      console.log(car2);

new命令在这里的作用是先创建一个对象,然后让对象调用构造函数。所以构造函数中的this指的是new创建的这个对象。

上述代码中声明了一个函数,函数的作用是返回一个具有不同属性值的对象。然后通过调用函数的方式创建了两个对象。

类在js中就是[具有某种特征的函数]

js中类的创建(声明)语法:

function 类名(对象属性1,对象属性2,对象属性3,...){
   
          this.属性1 = 对象属性1;
          this.属性2 = 对象属性2;
          this.属性3 = 对象属性3;
          ...
      }
      var 对象 = new 类名(value1,value2,value3,...);

js中类的声明方式多种多样,绝不仅有这一种。
后面继续提到不同的创建方式,而且对于类的创建方式来说这种创建方式也并不是最优选择。

1.3 类的作用

类就是用来快速的创建对象,不必每次构建对象都重新编写对象的结构。
事实上在js中,绝大多数情况类的作用的确就是用来快速创建对象的。

2.面向对象思想概述

面向对象,顾名思义是一种思想,是一种编程中以[使用对象来解决问题]为中心的思维逻辑。和面向对象(oop)对应的叫做面向过程(pop),两者之间的区别很多,例如:
pop:习惯分析出解决问题的所有步骤,将其构建为一个一个的函数。然后将这些步骤按照一定顺序实现。(顺序、选择、循环)
oop:则会创建一个对象,让对象拥有做某件事情的能力(给对象属性和方法)。
然后命令对象做某件事。(封装、继承、多态)

oop的核心就是如何构建一个对象。因为程序一切都围绕着这对象行进。所以构建对象可以说是oop思想的一大特征,而构建对象还有一个别名,叫做[对象的封装]!

2.1 封装与公私有

描述:封装是指构造具有某种特征的类,以通过对其进行实例化,来获得满足需求的对象的过程。
特征:
公有:对象中属性和方法,在对象外部能够直接访问,这样的属性和方法就被称为公有的属性和方法。
私有:对象中的属性和方法,仅在对象内部使用,这样的属性和方法就被称为私有的属性和方法。
实现:
通过在构造函数中,(this.属性)的方式为类添加公有的属性和方法
this.属性所添加的内容在对象的外部能够被直接访问。
通过在构造函数中,(添加局部变量和闭包)的方式为类添加私有的属性和方法,
局部变量保证了对象外部无法直接获取
闭包保证了对象外部可以间接获取。
特权函数:(闭包实现)
在js对象中能够用来访问内部局部变量的函数
使用特权函数来模拟私有的赋值调用过程。

function  People(pname,pability){
   
          this.pname=pname;
          this.pability=pability;
          var secret='梦';
          this.getSecret=function(){
   
              console.log(secret);
          }
      }
      var beixi=new People('贾先生',function(){
   
          console.log('敲代码');
      });
      console.log(beixi.pname);
      beixi.pability();
      //console.log(beixi.secret); //error
      beixi.getSecret();

3.原型

js中给函数提供了一个对象类型的属性,叫做prototype(原型)。
原型归函数所有,他不用创建,是默认存在的。
例:

function Car()<

你可能感兴趣的:(前端,javascript,开发语言,ecmascript)