- es6中箭头函数有什么特性
// 箭头函数的特性
// 不绑定arguments,用rest参数…解决
// 本身没有this的概念,捕获其所在上下文的 this 值,作为自己的 this 值,this指向全局
// 箭头函数不能使用new(会报错)
// 箭头函数没有原型属性(prototype)
// 箭头函数不能当做Generator函数,不能使用yield关键字
// 箭头函数不能换行
// 箭头函数有constructor、length属性
// 箭头函数可以立即执行
- 改变this指向的方法有哪些
- 在指定位置定义this存为变量
- 使用箭头函数
- 使用setTimeout
- 使用call()方法
- 使用bind()方法
- 使用applay()方法
- 请写出call(),bind(),apply()区别,并写出使用原型的方式构造一个call()方法
1.apply、call、bind他们三个都能改变函数this的指向问题;
// 2.apply、call这两个方法的主动调用,bind返回的是改变this指向后的新函数;
// 3.传参的问题区别,call和bind都是直接传递参数,apply传递的是数组
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);
- 请使用原型方式创建数组的shift方法和unshift方法
// Array.prototype.shifts = function(){
// for(var i=0;i<this.length-1;i++){
// this[i] = this[i+1];
// }
// this.length = this.length-1;
// }
// var arr = [11,22,33];
// arr.shifts();
// console.log(arr);
// Array.prototype.unshifts = function(user){
// this.length = this.length+1;
// for(var i=this.length-1;i>=0;i--){
// this[i] = this[i-1];
// }
// this[0] = user;
// }
// var arr = [11,22,33];
// arr.unshifts(44);
// console.log(arr);
- 请写出原型查找机制
// 1. 当访问一个对象的属性或方法时,首先查找这个对象自身有没有
// 2. 如果没有就查找它的原型(也就是 __proto__ 指向的prototype 原型对象 )
// 3. 如果还没有找到就查找原型对象的原型(Object的原型对象)
// 4. 依次类推一直找到Object为止( null )
// 5. __proto__ 对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条线路