第十四篇博客

  1. es6中箭头函数有什么特性

// 箭头函数的特性

                // 不绑定arguments,用rest参数…解决

                // 本身没有this的概念,捕获其所在上下文的 this 值,作为自己的 this 值,this指向全局

                // 箭头函数不能使用new(会报错)

                // 箭头函数没有原型属性(prototype)

                // 箭头函数不能当做Generator函数,不能使用yield关键字

                // 箭头函数不能换行

                // 箭头函数有constructor、length属性

                // 箭头函数可以立即执行

  1. 改变this指向的方法有哪些
  1. 在指定位置定义this存为变量
  2. 使用箭头函数
  3. 使用setTimeout
  4. 使用call()方法
  5. 使用bind()方法
  6. 使用applay()方法
  1. 请写出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);

                }

  1. 请使用深拷贝将 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);

  1. 请使用原型方式创建数组的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. 请写出原型查找机制

// 1. 当访问一个对象的属性或方法时,首先查找这个对象自身有没有

                // 2. 如果没有就查找它的原型(也就是 __proto__ 指向的prototype 原型对象 )

                // 3. 如果还没有找到就查找原型对象的原型(Object的原型对象)

                // 4. 依次类推一直找到Object为止( null )

                // 5. __proto__ 对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条线路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值