《JavaScript模式》读书笔记

作者:zccst

第四章:函数
函数的两个特征:是对象;提供作用域。

函数是对象表现如下:

  • 可以运行时动态创建,还可以在程序执行过程中创建
  • 函数可以分配给变量,可以将它们的引用复制到其他变量,可以被扩展,删除
  • 可以作为参数传给其他函数,并且还可以有其他函数返回
  • 函数可以有自己的属性和方法



下面介绍八种函数

一、API模式,为函数提供更好且更整洁的接口。
1,回调模式
也就是说,作为回调函数传递的时候
例如obj1.method1(obj2.method2)时,method1方法的this指向obj1,但obj2.method2方法的this并不指向obj2,而是window。
如果需要将obj2.method2的this指向某一个对象,则需要使用call或apply。具体是:

obj1 = {
    method1:function(callback, xxObj){
        //callback(args);//如果直接运行this指向window
        callback.call(xxObj, args);//就可以了
    }
}
批注:this指向window的还有超时函数

2,即时函数的返回值是另一个函数
首先,什么是即时函数?
(function(){
  alert("watch out!");
}());

(function(){
  alert("watch out!");
})();
(1)即时函数的传参
(2)即时函数的返回值。返回值是一个函数的模式得到广泛应用。


3,配置对象
var conf = {...};
addPerson(conf);

4,curry函数
把两个参数的函数拆成两部,第一个子函数接收第一个参数,再里面嵌套第二个子函数接收第二个参数。

二、性能模式,可以帮助加速代码运行
1,自定义函数
很奇葩的类型
var scareMe = function(){
  alert("Boo!");
  scareMe = function(){
    alert("Double Boo!");
  };
};
scareMe();//Boo!
scareMe();//Double Boo!

2,函数属性——备忘模式
即使用函数的静态属性和方法来保存实例

三、初始化模式
1,即时函数
2,即时对象初始化
({
  xx
  xx
  init:function(){}
}).init();
3,初始化时分支



第五章:对象

如果通过共有方法访问私有复合数据类型时,可能会导致私有复合数据类型被改写,所以最好不要直接传递,
如果需要传递,则有一下几种办法:
1,只传递复合数据类型的子属性(即基本数据类型)
2,通过浅复制和深复制的方式。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。