JavaScript 面向对象编程(封装、继承、多态)
学习书籍:《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()
- 解决方法:通过 instanceof 判断是否是 实例与类 的关系
var Book = function(a, b, c){
if(this instanceof Book){
}else{
return new Book(a, b, c)
}
}