JavaScript 面向对象编程 (封装、继承、多态)

本文详细探讨了JavaScript中的面向对象编程,包括封装的概念、属性的模拟实现、类的安全模式创建,以及各种继承方式如类式继承、构造函数继承、组合继承等。还讨论了多态、多继承相关问题,并提供了代码实现链接。
摘要由CSDN通过智能技术生成

学习书籍:《JavaScript 设计模式》

封装

属性概念
  • 私有成员(属性/方法)
  • 公有成员
  • 静态成员
  • 实例成员
  • 保护方法
属性概念的模拟实现 - 类
  • Book类的实现(构造函数 )
  • 静态属性:原型属性或闭包实现的局部变量(只用赋值一次)
  • 实例属性:构造函数中,通过 this 生成的属性(实例化时赋值,属于实例本身)
  • 公有属性:原型属性+实例属性(实例可以访问)
  • 私有属性:局部变量
  • 特权方法:闭包中,构造函数内部函数对外层变量的访问
  • 构造器:初始化时,对特权方法的调用
var Book = (
  function () {
   
    // 静态私有属性
    var bookNum = 0
    // 静态私有方法
    function checkBook() {
    }

    function _book(newId, newName, newPrise) {
   
      // 私有变量
      var name, price
      // 私有方法
      function checkId() {
    }

      //特权方法
      this.getName = () => {
    }
      this.getPrice = () => {
    }
      this.setName = () => {
    }
      this.setPrice = () => {
    }

      // 共有属性(实例属性)
      this.id = newId
      // 共有方法
      this.copy = () => {
    }
      bookNum++
      if (bookNum > 100) {
   
        //...
      }
      // 构造器
      this.setName(name)
      this.setPrice(price)
    }


    _book.prototype = {
   
      //类静态成员
      isJsBook: false,
      display: function () {
    }
    }

    return _book
  }
)()
类创建对象的安全模式
  • 问题:实例化类时,忘记加 new 关键字,导致 this 指向问题
var book = Book() // 初始化时,this 指向 window,且无返回值
  • 解决方法:通过 instanceof 判断是否是 实例与类 的关系
var Book = function(a, b, c){
   
	if(this instanceof Book){
   
		// 类的实现
	}else{
   
		return new Book(a, b, c)
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值