javascript框架设计阅读笔记的种子模块

1。命名空间:

在JS命名空间是利用物体的属性扩展。例如,用户定义一个对象B的属性和属性的一个物体在C,而B和C的财产属性的对象。所以= {乙:{ },{ } },然后C:用户可以在B对象和C对象定义相同的方法,那么B和C分别属于不同的命名空间,我们称之为B、C对象内部的方法,你可以叫它通过A.B.like(),a.c.like()。当然,一个属于属性窗口中的对象。

但有一种情况下,例如,boke.jsp页介绍jquery.js和prototype.js(他们添加窗口属性窗口对象),所以有冲突。

所以有任何()在jquery.js.page执行过程处理冲突:首先介绍了原型属性,然后原型将占据窗口美元,然后引入jQuery,jQuery将在_美元美元存放在窗口的属性,然后使用attribute.at美元这一点,你可以通过$调用jQuery方法。当你不需要使用jQuery现在想用原型,你可以叫美元。任何(),当美元将恢复到原型对象。在这一点上,你可以通过$使用原型法。

复制代码代码如下所示:

无功_美元=美元,_jquery = window.jquery窗口;

任何:功能(深){

美元美元= _窗口;

如果(深)window.jquery = _jquery;

返回jQuery; / /返回值,你可以赋值给其他变量,如chaojidan,所以你可以调用jQuery中chaojidan方法。

}



2。对象的扩展:

命名空间对象有,我们需要扩展函数,例如,我需要把对象的所有属性和方法复制到B对象中,我不必在B对象中一个接一个地编写代码。

复制代码代码如下所示:

函数组合(目标,源){

var args = { }。slice.call(参数),i = 1,

具=类型参数{参数。length-1 } = =布尔(args。流行):真实; / /不写了,真正的默认,默认是覆盖。

如果(args.length = = 1){

目标=!this.window:{ };

/ /如果只有一个物体的参数,它扩展了这个对象。例如,我叫混合(B)在一个对象中,那么这是一个,所以B的属性和方法添加到一个对象。但如果我们称之为混合(B)在窗口,我们将增加在B对象的属性和方法的对象并返回一个空的空对象,所以我们不能凌驾在窗口对象的名称相同的属性和方法。(只有窗口对象窗口的属性)

我= 0;

}

而(((来源=参数{我+ })){

对于(源中的键){

如果| |(具!如果没有覆盖,如果没有分配,首先确定键对象的存在,

{

目标{键} =源代码{ };

}

}

}

将目标;

}



大公司的面试官喜欢要求对数组进行重复检查。您可以看到数组中的每个项都可以是一个对象,而对象A和对象B甚至具有相同的属性和方法,但它们也不相等。字符串和数字,如123和123,在线搜索,您可以找到一个非常完整的方法。

三.阵列:

有许多阵列对象浏览器,如参数,document.forms,document.links,form.elements,document.getelementsbytagname、子等。

还有一个特殊写作的定制对象。

复制代码代码如下所示:

var arraylike = { {

0:a

1:B

长度:2

}



这个对象是由jQuery对象编写的。

我们需要将前面提到的数组对象类转换成数组对象。

的{ }。slice.call方法可以解决,但htmlcollection,老版IE下列表,不是对象的子类,和{ }。slice.call法不能用。

所以我们可以重写一个切片方法。

复制代码代码如下所示:

a.slice = window.dispatchevent功能(节点,开始,结束){ return { }。slice.call(节点、启动、结束);}

/ /如果窗口有一个dispatchevent属性支持{ }。slice.call方法,检测能力。

函数(节点,开始,结束){

VaR ret = { },N = nodes.length;

如果(最终未定义的类型| | = = = =结束=数系统(结束)){ / /比| |优先级高,所以最后也没写,或最终的人数是有限的

开始= parseInt(开始,10)| | 0; / /如果开始不存在或不是一个数,分配到0。

结束=结束定义= N:parseInt(,10); / /如果最终不存在,设置为N.

如果(开始< 0)开始;

如果(结束< 0)结束;

如果(结束)n;

对于(var i =开始;i <结束;i + +){

RET { } = {我} I-开始节点; / / IE使用数组赋值形成低版本

}

}

返回页首;

}



4。判断类型:

js的五种简单数据类型是:null、未定义、布尔、数字、字符串。

也有复杂的数据类型:对象、函数、正则表达式、日期、自定义对象,如人、等。

类型通常用来判断布尔,数字,字符串,和建议一般是用来确定对象的类型。但他们都是有缺陷的。例如,在firame阵列实例不在父窗口的一个数组的实例,并调用instanceof将返回false。(这个问题问360中学招募)。Typeof新的布尔(真) / 对象包对象。布尔,数字,字符串三种包装对象,JS高级程序编程中。

有很多人使用document.all类型确定是否IE,事实上,这是非常危险的,因为谷歌和Firefox的性能也很喜欢,所以在谷歌浏览器下出现这样的情况: / /未定义类型document.all document.all / / htmlallcollection类型,但法官是不确定的,但你可以阅读这个属性的值。

但现在你可以使用object.prototype.tostring.call法确定型。这种方法可以直接输出{ {类} }。在对象的方法,但不能用IE8和下面的窗口对象。您可以使用窗口 / /真实= = = =文档窗口 / /假ie6,7,8。

NodeType(1:2:3元属性:9:文本文件)

jQuery中用于确定使用类型的方法:

复制代码代码如下所示:

class2type = { }

jquery.each(布尔数字符串函数数组日期RegExp对象。分裂()),功能(我){

class2type {{对象+姓名+} = name.tolowercase();

/ / class2type = {{对象布尔}:布尔,{数量}:目标数,{ }:目标字符串的字符串,{对象} }:

});

jquery.type =功能(obj){ / /如果obj是空的,不确定的等,返回字符串null如果不是,toString方法被调用,如果你可以调用它,你返回的对象(在降低IE版本的窗口,Dom,和其他的ActiveX对象的对象)。

返回obj = null字符串(obj):class2type(obj){ } |调用ToString。|对象;

}



5.domready

JS的DOM节点,页面的DOM树必须营造一个良好的。因此,在window.onload方法经常被使用。但OnLoad方法直到所有资源加载执行。为了让页面来响应用户的操作速度,我们只需要DOM树的构建,我们应该使用js操作。你不需要等待所有的资源被加载(图片、flash)。

所以domcontentloaded事件发生,和DOM树被触发时建成。但旧版本,即不被支持,所以是一个黑客。

复制代码代码如下所示:

如果(document.readystate =完整){ / /如果Dom文档加载加载js文件完成后,这是当时用来执行fn方法(你要执行的方法)。从文件加载完成后,document.readystate值是完整的

setTimeout(fn); / /异步执行,你可以让它后面的代码执行之前。这里是jQuery的使用,你可以不理解。

}

如果(文件。addEventListener){ / /支持domcontentloaded事件

Document.addEventListener(domcontentloaded,FN,false); / /泡沫

Window.addEventListener(负载,FN,false); / /如果DOM树构建在加载js文件,domcontentloaded事件是不是在这个时间触发(已由最终触发和触发Load事件)

}

别的{

document.attachevent(onreadystatechange ),功能({ / /在IE iframe,有时优先onload,有时不。

如果(document.readystate =完整){

FN();

}

});

window.attachevent(onload,FN); / /将发挥作用,防止其他监控事件没有得到,至少可以引发onload FN的方法。

var = false; / /看看iframe

尝试{ / / window.frameelement是iframe或框架对象包含此网页。没有一个是空的。

最高window.frameelement = = null document.documentelement;

} catch(e){ }

如果(顶。doscroll){ / /如果没有iframe,和IE

(功能doscrollcheck(){

尝试{

top.doscroll(左); / / IE下,如果建立了DOM树,你可以调用HTML doscroll方法

} catch(e){

返回setTimeout(doscrollcheck,50); / /如果你没有准备好,然后继续监控

}

(FN);

})

}

}



FN方法必须包含所有绑定事件的删除。

当然,IE也可以使用脚本延迟破解,其原理是指定延迟的脚本在DOM树完成后执行,但这需要添加额外的js文件,这在单独的库中很少使用。

使用原则:在文档中添加脚本标签,并使用script.src =XXX。JS

也就是说,当DOM是建造的xxx.js将被执行,其this.readystate将变得完整。

以上是第一章javascript框架设计的阅读笔记,内容更精简,方便大家更好地了解本章的基本内容。