高级技能分享

高级技能分享
上一次,Ajax部分完成了。本周,我们完成了高级技能部分。

1、类型检测
Object.prototype.toString.call的方式(obj)使用。
因为无论是类也可以准确地确定变量的类型。

2。一个安全的构造函数
通常,在定义构造函数时,我们使用类似的方法
复制代码代码如下所示:
功能人(名称){
this.name =名称;
}

然而,如果不去功人=新的人(cnblogs )。
它是无功的人=人(cnblogs ),那么这将点在别处,对其余的对象造成污染。
解决的办法是判断的时候this.property设置
这是人
如果不是,那么新的人(X,X,X);
复制代码代码如下所示:
功能人(名称){
如果(这是个人){
this.name =名称;
其他{ }
返回新人(姓名);
}
}

但要注意,如果构造函数的其余试图继承通过person.call(,X)。
需要注意的是,该函数的原型在实例化之前是指向人的。

3,惰性负载功能
在调用函数时,常常会判断浏览器的功能。
例如
复制代码代码如下所示:
功能创造(){
如果(supporth5){
做某事
其他{ }
/ /做别的事
}
}

然而,如果一个浏览器支持一个函数,它必须始终被支持,所以在执行代码时不必判断每一次,因为判断一次就足够了。
所以可以重写
复制代码代码如下所示:
功能创造(){
如果(supporth5){
(创造=功能){ / /改写创造功能
做某事
}
其他{ }
/ /同上。
}
}

这样,第一个调用将被判断,然后函数被重写,它自然不会被判断。
4。功能的结合
在JS中,最困惑的是谁指向了这个问题。
事实上,在我学习JS的很长一段时间里,我找到了一个结论。
函数中的这个点指向最终调用函数的对象,换句话说,哪个对象调用函数,这指向那个对象。
要清楚地表明,函数绑定不是问题。
调用变更函数的方法是调用和应用,但是所有这两种方法都将执行函数。
如果您不想执行一个函数,而不是将函数传递给函数并希望更改该函数,请使用最新绑定。
5、定时器
settimeou,setInterval,或Ajax是异步的,多线程,但js是单线程。
事实上,这些方法不添加线程。
setTimeout(fn,300)表示300毫秒的FN在JS执行队列。
如果队列中没有执行的事务(即JS解释器处于空闲状态),那么它将立即执行。否则,该函数将在处理队列的事务之后执行。
因此,使用setTimeout和setInterval不精确的控制时间。
也要注意使用setTimeout模拟setInterval控制最小执行时间间隔可以精确地重要。
6,使用定时器固定时间执行该方法。
如果一个方法是长期执行并可能导致浏览器不响应的时间很短,然后一个定时器可以使用固定的一段时间。这并没有让JS将在一个繁忙的状态(浏览器不响应),有空闲时间的处理交易的其余部分。例如,有一个1000长度数组循环,然后100每次,和JS是闲置在中部时间做其他操作
7。节流。
功能节流阀是改善性能的好方法,在某些情况下,它可以提高效率数倍。
例如,当你拖动或一件onresize事件发生。
每次你这样做,你已经做过很多次了:
复制代码代码如下所示:
var I=0;
window.onresize =函数(){
console.log(我+ +);
}
试图扩展浏览器,你会发现控制台马上显示我已经超过100了。
改变写作的方式,例如:
复制代码代码如下所示:
var i = 0,j = 1;
window.onresize =函数(){
如果(j % = 2 = 0){
console.log(我+ +);
}
++;
}
创建一个变量j,允许j每次只执行偶数,即减少一半的次数。
这样的处理可以减少50%的执行数,但是对于用户来说,它并没有感觉到差异。

还有一个使用定时器的函数节流。
核心代码如下所示:
复制代码代码如下所示:
函数节流(方法,上下文){
ClearTimeout(方法。TID);
method.tid = setTimeout(){()函数(
method.call(背景);
},100);
}
这里我们介绍了执行函数和函数的执行环境,也就是说,在函数中执行这个指向对象,然后先清除动作队列,然后执行操作。
这种形式可以更好地控制行动的频率
假设它是一个浏览器的伸展动作,只要你拉得足够快,每个时间间隔触发在100ms,那么只有最后的结果将被执行。
8。自定义事件
本质是观察者模式,基本模式是3个功能的需要,
函数是绑定事件,函数是触发事件,而另一个函数是删除绑定。
这种模式可以大大减少代码耦合。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部