《JavaScript 设计模式》阅读笔记之第二章:面向对象编程

《JavaScript 设计模式》阅读笔记之第二章:面向对象编程

本章用实例详细呈现了面向对象编程的三大特点:封装,继承,多态。

易混淆概念

类有三部分组成:

1、构造函数内,实例化对象复制使用。

2、构造函数外,类通过点语法添加的,仅类可用。

3、类原型,实例化对象共用。

 

构造函数式继承是指仅继承了类中构造函数内的部分。

 

公有:(函数内通过 this 定义 ) 对应 私有(函数内局部变量/方法 函数作用域)

共有:类原型上定义

静态:类 . 点语法定义

<script>
  //2.1 两种编程风格,面向过程 VS 面向对象
  //面向过程:用函数实现
  //面向对象:需求抽象为对象,方便重复使用和修改。

  //2.2 封装
  //声明一个函数保存在变量(代表类的变量名,首字母大写)里,在函数内部使用this添加属性和方法。
  //通过this添加的属性和方法,在使用类创建新对象时,每个对象都会复制一份,并且可以在外部访问到,由此可看作是对象的公有属性和方法。
  //在原型上添加属性和方法,有两种方法。两种方法不能混用,如果混用,后定义的会完全覆盖先定义的。
  //方法一:为原型对象的属性赋值

  var Book=function(id,name,price){
    this.id=id;
    this.name=name;
    this.price=price;
  }

  Book.prototype.display=function(){
      console.log("展示这本书")
  }

  //方法二:为原型对象赋值
  Book.prototype={
    display:function(){
      console.log("展示这本书")
    }
  }

  var book=new Book(10,'javascript 设计模式',59)
  console.log(book.name)

  //js函数作用域,声明在函数内部的变量及方法在外界访问不到,通过此特性可创建类的私有变量和私有方法。

  var Book=function(id,name,price){
    //私有属性
    var num=1;

    //私有方法
    function checkId(){
      console.log(id)
    };

    //公有方法又称特权方法 
    //初始化实例对象
    this.getName=function(){console.log("getName")};

    this.getPrice=function(){console.log("getPrice")};

    this.setName=function(){console.log("setName")};

    this.setPrice=function(){console.log("setPrice")};

    //对象公有属性
    this.id=id;

    //对象公有方法
    this.copy=function(){}

    //构造器(调用特权方法)
    this.setName(name)
    this.setPrice(price)
  }

  //类外面通过点语法添加的属性和方法,在使用new关键字创建新对象时没有执行到(静态属性/方法),所以新创建的对象无法访问这些属性和方法,但可以通过类来使用。

  //类 静态属性(对象不能访问)
  Book.isChinese=true;

  //类 静态方法(对象不能访问)
  Book.resetTime=function(){
    console.log("resetTime")
  }

  Book.prototype={
    //原型共有属性
    isJsBook:true,
    
    //原型共有方法
    display:function(){
      console.log("展示这本书")
    }
  }

  var b=new Book(10,'javascript 设计模式',59);
  console.log(b.num) //undefined
  console.log(b.isJsBook) //true
  console.log(b.id) //10
  console.log(b.isChinese)//undefined
  console.log(Book.isChinese)//true
  Book.resetTime()//resetTime

  //闭包
  //在一个函数内部创建另一个函数,内部函数可以访问外部函数作用域中的变量。
  //有时将类的静态变量通过闭包实现
   var Book=(function(id,name,price){
     //静态私有变量
     var bookNum=0;
     //静态私有方法
     function checkBook(){console.log("checkBook")}
     
     const 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Irene1991

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值