Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaScript设计模式与开发实践【第一部分】 #11

Open
Vxee opened this issue Jul 21, 2018 · 0 comments
Open

JavaScript设计模式与开发实践【第一部分】 #11

Vxee opened this issue Jul 21, 2018 · 0 comments
Labels
read read books

Comments

@Vxee
Copy link
Owner

Vxee commented Jul 21, 2018

今天开始阅读《JavaScript设计模式与开发实践》,对于设计模式的学习一直渴望已久。

设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。

其实平时在工作中不知不觉在使用某些设计模式,只是我们不知道而已。

动态类型语言和静态类型语言

  • 静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时 候,待变量被赋予某个值之后,才会具有某种类型。
  • 静态类型语言的优点首先是在编译时就能发现类型不匹配的错误,编辑器可以帮助我们提前 避免程序在运行期间有可能发生的一些错误。并对程序进行一些优化工作,提高程序执行速度。
  • 动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性。由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需去考虑它原本是否被设计为拥有该方法。
    这里就有一个 鸭子类型 的概念。

“如果它走起 路来像鸭子,叫起来也是鸭子,那么它就是鸭子。”

利用鸭子类型的思想,我们 不必借助超类型的帮助,就能轻松地在动态类型语言中实现一个原则:“面向接口编程,而不是 面向实现编程”。

多态

多态的最根本好处在于,你不必再向对象询问“你是什么类型”而后根据得到的答案调用对象的某个行为——你只管调用该行为就是了,其他的一切多态机制都会为你安排妥当。

JavaScript不会进行类型检查,很容易实现多态,只要你具有这个行为就好。而静态类型语言需要被设计为可以向上转型:当给一个类变量 赋值时,这个变量的类型既可以使用这个类本身,也可以使用这个类的超类。

封装

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

原型模式

在 JavaScript中,每个对象都是从 Object.prototype 对象克隆而来的,这样的话, 我们只能得到单一的继承关系,即每个对象都继承自 Object.prototype 对象,这样的对象系统显然是非常受限的。
但是我们可以动态地指向其他对象。这样一来,当对象 a 需 要借用对象 b 的能力时,可以有选择性地把对象 a 的构造器的原型指向对象 b,从而达到继承的效果。如下代码就是常用的原型链继承方式:

var obj = {
    name: 'sven'
};

var A = function(){};
A.prototype = obj;

var a = new A();
console.log(a.name); //  sven
@Vxee Vxee added the read read books label Jul 22, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
read read books
Projects
None yet
Development

No branches or pull requests

1 participant