js设计模式阅读笔记

javascript设计模式与开发实践

第一章

鸭子类型,无需关注对象本身,关注对象的行为。

在动态类型语言的面向对象设计中,鸭子类型的概念至关重要。

多态:多态最根本的作用就是通过吧把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。

this总是指向一个对象,但是具体指向哪个对象是在运行时基于函数的执行环境动态绑定的。

call和apply的用途:

  1. 改变this的指向,也可以理解成在函数调用的时候,把某个对象取代掉函数体内的this。
1
2
3
4
5
6
7
8
9
var obj = {
name: 'sven',
}
function getName() {
console.log(this.name)
}
getName.apply(obj);
  1. 借用其他对象的方法

想Array、String等构造函数,在原型上有许多方便的方法,而这些方法都是使用this,即new出来的实例作为上下文,那么我们就可以盗用这些原型方法,改变其this。

1
2
3
(function () {
Array.prototype.push.call(arguments, 'another')
})('1', 2)

第三章

闭包的更多作用

1、 封装变量

当一个函数的逻辑需要使用到一个不在其函数作用域内的变量时,最不妥当的方法就是将这个变量定义在这个函数体外,这会给作用域环境造成一定的污染。比如当我们对运算过程做缓存时,缓存这个变量该怎么办?

闭包的作用之一就是封装变量,将这个变量和函数体封装在一起,然后将函数暴露出去。

1
2
3
4
5
6
const mult = (function () {
const cache = {};
return function () {
return cache[arguments] || cache[arguments] = (function () {}).apply(null, arguments);
}
})()