javascript读书随笔 1

1.1 jQuery 的 noConflict

 1 var _jQuery=window.jQuery  //window.jQuery可能是别的库的变量名,先用jQuery对象中的临时变量存下来---var _jQuery
 2 _$=window.$  //同上
 3 jQuery.extend({
 4     noConflict:function(deep){
 5         window.$=_$;
 6         if(deep){    //如果jQuery是需要深度让出全局变量名时,将noConflict函数传入一个参数,只要参数显示为true就将全局jQuery也放弃
 7             window.jQuery=_jQuery;  //给回原先的占有该变量的值
 8             return jQuery
 9         }
10     }
11 })

1.2 对象扩展

 1 function mix(target,source){
 2     var args=[].slice.call(arguments),  //将类数组对象argument转换成数组
 3     i=1,key,
 4     ride=typeof args[args.length-1] =="boolean" ?args.pop():true;  //typeof 首先判断它是否为boolean类型,如果是就将最后一个参数返回,如果不是就返回true,默认为覆盖同名参数
 5     if(args.length===1){   //上一步已经将是否覆盖同名布尔参数去除,如果剩下的只有一个参数时
 6        target= !this.window ? this : {}; //如果现在是在全局作用域下,就返回this---window对象;如果不是就返回一个空对象以接下来接受剩余一个参数的属性
 7        i=0;
 8     }
 9     while((source=args[i++])){  //将剩下的参数一个一个属性复制给target
10        for(key in source){
11           if(ride||!(key in target)){
12               target[key]=source[key];
13             }
14         }
15     }
16     return target;
17 }

1.3数组化

在浏览器中存在许多类数组对象 function.arguments,doucument.forms,form.elements,doucument.links等,有些库都存在一些数组化的函数

 1 var makeArray =function(array){
 2     var ret =[];
 3     if(array!=null){
 4        var i =array.length;  //获取array中的length属性,如果length属性为空,说明它不是类数组
 5        //window,String,function都有length属性,String为字符串长度,function为默认参数个数;array.setInterval判断是否array为window对象,虽然这不是最佳方式。
 6        if(i==null ||typeof array=== "string" || jQuery.isFunction(array)||array.setInterval)
 7            ret[0]=array; //保证发挥的是数组
 8        else
 9            while(i)
10                ret[--i]=array[i];
11     }
12     return ret;
13 }

1.4 类型判断

jQuery的type函数,通常判定一个函数类型的时候都运用toString函数

 1 class2type{}
 2 //将有可能的几种除了对象的类型放入一个class2type的对象中
 3 jQuery.each("Boolean Number String Function Array Date RegExpObject".split(" "),
 4 function(i,name){
 5     class2type["[object"+name+"]"] = name.toLowerCase();
 6 });
 7 jQuery.type=function(obj){
 8     return obj==null?  //如果obj==null 因为NULL没有tostring方法,所以就直接调用String函数,
 9     String(obj) :
10     class2type[toString.call(obj)]|| "object";//如果调用tostring 为上面所写的对象属性返回相应的值,否则认为为objec
11 }

1.5 domReady实现

window.ready=fn,这条语句是当所有资源已经完成,开始执行fn函数。

在jQuery中运用$.(fn)可以多次使用,都会依次执行,且是当dom树构建完成时。

判断dom树是否完成可以有四种方法

(1)W3C中有一个DOMContentLoaded事件,监听这个函数执行函数,现在有许多浏览器都支持

(2)对于ie可以用Diego Perini的hack

 1 (function (){
 2     try{
 3        document.documentElement.doScroll(‘left‘);//如果报错,说明还未执行完毕
 4     }
 5     catch (e){
 6        setTimeout(arguments.callee,50);//50毫秒后重新执行函数
 7        return;
 8     }
 9     fireReady(); //要执行的函数
10 })();

(3)对于ie还可以用script defer hack进行判定,但这不推荐,要加多有的script

1 document.write("<script id=_ie_onload defer src=//0><\/scr"+"ipt>");
2 script=document.getElementById("_ie_onload");
3 script.onreadystatechange=function(){ //ie即使是死链也能触发事件
4     if(this.readyState=="complete"){
5         fireready();//指定defer的script会在DOM树建完才触发
6     }
7 }

(4)对于在firefox3.6之前可以用 判断document.documentElement是否为true来触发,和上面第二方法类似,不为true继续用setTimeout来循环调用判断

时间: 2024-07-29 15:03:40

javascript读书随笔 1的相关文章

javascript读书随笔2

2.1 require.js与AMD规范 require.js是一种支持AMD规范,是一种能将web前端变成模块化编程的框架,其中最重要的两个函数为require和define.define是开发者开发的方法,require是模块试用者关心的方法. AMD规范即异步模块定义. 2.2加载器所在路径探知 补充知识点1:window.error简单解析 在javascript中也存在try-catch语句,在window.error中会传给error三个参数,第一个为message,是我们在thro

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

Javascript读书笔记:字符串常用方法

concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; 4 5 console.log(s1.concat(s2,s3));//abc 数组中的concat():将参数添加为数组的元素,返回新的数组. 1 var arr = [1, 2, 3]; 2 console.log(arr.concat(4, 5));//[1,2,3,4,5] indexOf() 查找子

高性能javascript读书笔记(三.DOM 编程1)

第三章DOM Script DOM编程 读书笔记 访问和修改DOM元素 浏览器通常要求DOM实现和JavaScript保持相互独立. <!-- 例如IE中,被称为JScript的JavaScript实现位于库文件jscript.dll中,而DOM实现位于另一个库mshtml.dll(内 部代号Trident).这种分离技术允许其他技术和语言,如VBScript,受益于Trident所提供的DOM功能和渲染功能.Safari使用Webkit的WebCore处理DOM和渲染,具有一个分离的JavaS

javascript闭包(Effective JavaScript读书笔记)

Effective JavaScript:编写高质量JavaScript代码的68个有效方法: Item 11:   Get Comfortable with Closures Closures may be an unfamiliar concept to programmers coming from languages that don’t support them. And they may seem intimidating at first. But rest assured tha

Javascript初学随笔

两种常用的表述方式:Javascript是一种脚本语言,必须置于<script></scirpt>之间,可以放在<body>或<head>部分,不过不建议放在<body>部分. 最好放在<head> 或者 新建一个js文件(Javascript的扩展名)在<head>中通过<script src=""></script>来调用 分号(;):java和javascript不一样,j

JavaScript 闭包(随笔)

闭包,伟大的闭包.... 先看看百科对百度的定义是什么样的. 百科说:闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量). 看完整个人都不好了.  这都是什么鬼??? 还是自己总结下: 什么样才能产生闭包?在javascript技术层面上来说父函数嵌套子函数的形式就可能会产生闭包函数.如这样的: //闭包函数fn的创建 function fn (){ var a = 2; var b = 4; fu

JavaScript读书笔记(4)-变量、作用域和内存问题

1.ECMAScript数据类型分为:基本类型值和引用类型值: ECMAScript中所有函数的参数都是按值传递的: 检查对象的类型:varible instanceof constructor Alert(person instanceof Object); 2.  执行环境和变量 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中: 全局执行环境是最外围的一个指定环境,在web浏览器中,全局执行环境是window对象,所有的全局变量和函数都是window对象

JavaScript读书笔记(2)--数据类型

1.  严格模式:在javascript中定义了一种不同的解析与执行模型.在严格模式下,一些不确定的行为将得到处理,对某些不安全的操作也会抛出错误. 用法是在脚本中添加:”use strict”; 这是一个编译指示,用于告诉引擎切换到严格模式: 2.  Javascript中的语句,若没有带分号,由解析器确定语句的结尾,但不推荐这么做: Javascript关键字: break,case,catch,continue,debugger*,default,delete,do,else,finall