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框架设计的阅读笔记,内容更精简,方便大家更好地了解本章的基本内容。