bind的实现
- 实现之前,回顾一下将类数组转化为数组有哪些方法
- 利用改变原数组的方法slice()
- slice()可以不传参数,结果就是将原数组整个切割下来返回一个数组
- slice(start,end),end取不到
var a = [1,2,3];
var b = a.slice(); //b为[1,2,3]
var c = a.slice(0,2);//c为[1,2]
那么将类数组转化为数组
//基于slice
var arr = Array.prototype.slice.call(类数组);
//或者
var arr = [].slice.call(类数组);
- 利用es6语法
var arr = Array.from(类数组)
- 剩余参数
var arr = [...类数组];
bind实现代码
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(
this instanceof fNOP && oThis ? this : oThis || window,
aArgs.concat(Array.prototype.slice.call(arguments))
);
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
vue中v-for中绑定的key有什么作用
- vue和react都实现了一套虚拟DOM,使我们可以不直接操作DOM元素,只操作数据便可以重新渲染页面。而隐藏在背后的原理便是其高效的Diff算法。
- vue和react的虚拟DOM的Diff算法大致相同,其核心是基于两个简单的假设:
- 两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构。
- 同一层级的一组节点,他们可以通过唯一的id进行区分。
- 需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点
- key的作用主要是为了高效的更新虚拟DOM。另外vue中在使用相同标签名元素的过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们,否则vue只会替换其内部属性而不会触发过渡效果。
攻击https的方法
针对于HTTPS的攻击,多存在于中间人攻击的环境中,主要是针对于HTTPS所使用的压缩算法和CBC加密模式,进行side-channel-attack。这几类攻击的前置条件都比较苛刻,且都需要受害主机提交很多次请求来收集破译关键数据的足够信息。
攻击者可以获取受害者的网络通信包。(中间人攻击,ISP供应商)
浏览器和服务器支持均支持并使用压缩算法。
攻击这可以控制受害者发送大量请求并可以控制请求内容。
let Single = (function(){
let instance;
return function(name){
if(instance !== null){
return instance;
}
this.name = name;
instance = this;
}
})()