es6中箭头函数的特性:
| 本身没有this的概念,捕获其所在上下文的 this 值,作为自己的 this 值,this指向全局 |
| 箭头函数不能当做Generator函数,不能使用yield关键字 |
| 不绑定arguments,用rest参数…解决 |
| 箭头函数有constructor、length属性 |
| 箭头函数没有原型属性(prototype) |
| 箭头函数不能使用new(会报错) |
| 箭头函数可以立即执行 |
| 箭头函数不能换行 |
改变this指向的方法:
| 在指定位置定义this存为变量 |
| 使用setTimeout |
| 使用applay()方法 |
| 使用bind()方法 |
| 使用call()方法 |
| 使用箭头函数 |
call(),bind(),apply()区别与使用原型的方式构造一个call()方法:
区别:
| apply、call这两个方法的主动调用,bind返回的是改变this指向后的新函数. |
| .apply、call、bind他们三个都能改变函数this的指向问题. |
| 传参的问题区别,call和bind都是直接传递参数,apply传递的是数组. |
构造一个call()的方法:
Function.prototype.callNew = function(content,...sum){
console.log(!content);
if(!content|| context === null|| context === undefined){
context = window;
}
let fn = Symbol();
content[fn] = this;
return content[fn](...sum);
}
使用深拷贝将 let a=[1,2,3,4],复制给let b = []:
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=2;
console.log(a,b);
本文介绍了ES6中箭头函数的特性,如无this、不可用作Generator、原型等,并比较了call、bind和apply改变this指向的方法。同时,讲解了如何构造call方法以及深拷贝的实现,包括递归处理对象的实例。
2186

被折叠的 条评论
为什么被折叠?



