`

读Js设计模式笔记

阅读更多
书:设计模式:

第一章:

实现设计模式比较容易, 而懂得应该在什么时候使用什么设计模式则较为困难. 未搞懂设计模式的用途就盲目套用, 是一种不安全的做法. 你应该尽量保证所选用的模式就是最恰当的, 并不要过度牺牲性能.

在Js这类轻灵的语言中, 过度复杂的框架会很快把应用程序拖入泥沼. 你使用的编程风格和选择的设计模式应该与所要完成的具体工作相称.

可使用的继承方式有两种, 原型式继承和类式继承.

Function.prototype.method = function(name, fn) {
	this.prototype[name] = fn;
}


3种原始数据类型: 布尔, 数字, 字符串
一切皆为对象, 除了3种基本数据类型. 即便是这3种数据类型, 在必要的时候也会被自动包装为对象.
并且所有对象都是易变的(mutable). 例如为函数添加属性:
function fn() {};
fn.num = 0;

与对象的易变性相关的还有内省(introspection), 反射(reflection)概念.

var baz = (function(foo, bar) {
	return foo*bar;
})(10, 2);
// baz will equal 20


匿名函数最有趣的用途是用来创建闭包(clusure)
Js具有函数级的作用域, 并且其作用域又是词法性质的(lexically scoped), 这意味着函数运行在定义它的作用域, 而不是在调用它的作用域中.
利用这两个因素就能把变量包裹在匿名函数中加以保护.

var baz;

(function() {
	var foo = 10;
	var bar = 2;
	baz = function() {
		return foo * bar;
	}
})();


baz(); // 因为函数baz定义在这个闭包中, 所以他能访问这两个变量, 即使是在该闭包执行结束后.
// 并且foo, bar会随着 baz一起存在(我是这样想的)
// 返回一个内嵌函数是创建闭包最常用的手段
// 这里外层函数才是闭包吧?


第二章: 接口

Js实现接口的三种方式: 注释法, 属性检查法, 鸭式辨型法.
没有那种技术是完美的, 但三者结合使用基本上可以令人满意.



第三章: 创建对象的基本模式(封装)
预测人们会怎样使用你的代码并不容易, 封装可能会损害类的灵活性, 导致其无法被用于某些你未曾想到过的目的.

1.门户大开型
2.使用下划线表示方法或属性的私有性(多了一种命名规范)
3.使用闭包创建真正的私有成员


3.使用闭包创建真正的私有成员, 弊端:
这种对象创建模式解决了其他模式中的所有问题, 但它也有自己的一些弊端. 在门户大开型和下划线对象创建模式中, 所有方法都创建在原型对象中, 因此不管生成多少对象实例, 这些方法在内存中只存在一份.
而使用闭包对象创建模式, 每生成一个新的对象实例都将为每一个使用方法和特权方法生成一个新的副本. 这会耗费更多的内存, 所以只适宜在真正需要使用成员的场合.
另外, 这种对象创建模式也不利于派生子类, 因为所派生出的子类不能访问超类中的任何私有属性和方法, 故而在Js中使用闭包实现私有成员导致的派生问题被称为"继承破坏封装". 如果你创建的类以后可能需要派生出子类, 那么最好还是采用前两种方式.

封装之弊:
1.测试
2.使用封装意味着不得不与复杂的作用域链打交道, 而这会使错误调试更加困难. 实现私有方法和属性所需的闭包也让它变得更加复杂.


第四章: 继承 (基于类的继承,原型式继承)



分享到:
评论

相关推荐

    JS设计模式笔记和代码

    JavaScript设计模式是软件开发中的一种最佳实践,它们提供了一种在特定情况下解决复杂问题的标准化方法。本笔记和代码集合涵盖了多种重要的设计模式,旨在帮助开发者编写更可维护、可扩展和可重用的JavaScript代码。...

    设计模式之六大原则详解,Markdown笔记

    详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。

    javascript设计模式之模块模式学习笔记.docx

    ### JavaScript设计模式之模块模式详解 #### 模块模式概述 在JavaScript开发中,模块模式是一种常见的设计模式,它提供了一种封装私有变量和公开API的方法。这种模式有助于提高代码的可维护性和可扩展性,同时保持...

    JavaScript 设计模式与开发实践 读后笔记.zip

    【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发...

    2023软件设计师笔记

    其次,笔记可能会深入讲解设计模式(Design Patterns),这是软件设计中的重要概念,如工厂模式、单例模式、观察者模式等。这些模式为解决常见的软件设计问题提供了标准化的解决方案,是提高代码复用性和灵活性的...

    JS程序设计笔记JS程序设计笔记.doc

    JavaScript(简称JS)是一种轻量级的解释型编程语言,主要用于客户端的Web开发,赋予网页动态功能。JS不仅用于网页,还广泛应用于网页游戏、地图搜索、股市信息查询以及各种Web聊天应用等场景。它是许多前端框架,如...

    ️前端学习笔记,JavaScript,TypeScript,Vue,React,CSS,设计模式,数据结构,NodeJ.zip

    ️前端学习笔记,JavaScript,TypeScript,Vue,React,CSS,设计模式,数据结构,NodeJ

    j2EE-MVC设计模式(内附ppt讲解,学习笔记和应用实例)

    **MVC设计模式详解** **一、什么是MVC设计模式** MVC,即Model-View-Controller,是一种软件设计模式,常用于构建可维护性和可扩展性高的Web应用程序。在J2EE环境中,MVC模式是开发大型企业级应用的重要框架之一。...

    JavaScript学习笔记.pdf

    JavaScript学习笔记是一本关于JavaScript...综上所述,JavaScript学习笔记不仅是初学者入门编程的教材,也为专业网页设计师和开发人员提供了宝贵的学习资源,是推动个人在网页设计和网站建设领域不断进步的有力工具。

    html css js全套学习笔记+举例

    JavaScript还有许多库和框架,如jQuery简化DOM操作,React.js和Vue.js用于构建用户界面,Node.js则让JavaScript能在服务器端运行。ES6(ECMAScript 6)版本引入了许多新特性,如let和const变量声明、模板字符串、...

    韩顺平老师最全读书笔记

    对于进阶学习者,深入学习并发编程、设计模式和框架(如Spring)将有助于提升开发能力。 接下来是JSP(JavaServer Pages),它是基于Java的动态网页技术,用于构建交互式的Web应用。JSP的学习可能涵盖JSP基本语法、...

    web读书笔记

    3. **MVC模式**:在Java Web开发中,Model-View-Controller(MVC)设计模式很常见。模型(Model)负责处理数据,视图(View)展示数据,控制器(Controller)处理用户请求并调用模型和视图。 4. **框架应用**:...

    SpringBoot+Vue读书笔记功能管理系统(前后端分离包含数据库脚本文件).zip

    Vue.js则是一个轻量级的前端JavaScript框架,以其简洁的API和组件化开发模式受到开发者喜爱。在这个读书笔记系统中,Vue被用来构建用户界面,通过Ajax异步通信与SpringBoot后端进行数据交互,实现页面动态更新和交互...

    《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析

    JavaScript设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在JavaScript中,工厂模式的主要目的是通过一个公共的接口或者方法来创建对象,这样调用者无需关心对象的具体类型,只需要知道它...

    js4笔记.rarjs4笔记.rar

    JavaScript,简称JS,是一种广泛应用于Web开发的轻量级、解释型编程语言,以其灵活性和交互性在网页设计中占据核心地位。"js4笔记.rar" 提示我们这可能是一份关于JavaScript第四版(通常指的是ECMAScript 4,虽然这...

Global site tag (gtag.js) - Google Analytics