Javascript设计模式与开发实践——面向对象的JavaScript(多态、封装、继承) (2)

封装的目的是将信息隐藏,封装应该被视为“任何形式的封装”,也就是说,封装不仅仅是隐藏数据,还包括隐藏实现细节、设计细节以及隐藏对象的类型等。

个人理解就是封装内部实现过程,通过暴露API接口来和外部进行通信,只要保持API不变,内部实现可以修改。

3.3 封装类型

由于JavaScript是一门动态类型的语言,无法像传统的静态类型语言一样通过抽象类和接口来进行封装(个人也不是很了解),所有JavaScript在这方面是没有能力实现的,也是这门语言的缺陷吧,

3.4 封装变化

找到程序中的变化并对其进行封装,即“找到变化并封装之”。

23种设计模式安按照封装变化的区别可以分为三种:

创建型模式。封装创建对象的变化。

结构型模式。封装对象之间的组合关系。

行为型模式。封装对象之间的行为变化。

其基本思路还是围绕把系统中稳定不变和容易变化的隔离开来,提高程序的稳定性和可扩展性。

1.4 继承 1.4.1 使用克隆的原型模式

JavaScript是采用基于原型的面向对象系统,而原型模式又是一种设计模式。

原型模式创建对象时,不再关注具体的类型,而是找到一个对象,然后通过克隆的方式来创建一个一模一样的对象。

原型模式的实现关键,是语言本身是否提供了clone方法。ECMAScript 5提供了Object.create 方法,可以用来克隆对象。

var LOL_dogface = function () { this.blood = 100; this.color = \'red\'; }; // 实例化一个小兵对象 var dogface = new LOL_dogface(); dogface.blood = 700; dogface.color = \'blue\'; // 基于Object.create方法克隆对象 var cloneDogface = Object.create(dogface); console.log(cloneDogface.blood); console.log(cloneDogface.color);

Object.create方法的本质实际上是创建一个新对象,并修改其原型指向:

// Object.create实现原理 Object.create = function (obj) { var F = function () {}; F.prototype = obj; // 修改函数的原型 return new F(); // 返回新的构造函数 }; 1.4.2 JavaScript中的原型继承

基于原型链的委托机制就是原型继承的本质。

在 JavaScript语言中不存在类的概念(es6中已有,但只是语法糖),对象也并非从类中创建出来的,所有的 JavaScript对象都是从某个对象上克隆而来的。 JavaScript遵守原型编程的基本规则:

所有的数据都是对象(所有对象都来源于Object.prototype这个根对象)

要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它(new操作符)

对象会记住它的构造器的原型(通过 proto 这个属性)

如果对象无法响应某个请求,它会把这个请求委托给它的构造器的原型(原型链查找)

具体关于原型链的知识可以看看我写的这篇文章,虽然很简单。

因为是第一次写这么多,还不是很会写,大部分都是参考的文章,还希望各位见谅。

参考文献

《JavaScript设计模式与开发实践——曾探》
JS设计模式与开发实践— Junli_1413

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwjyz.html