js问题(3)

31.Void(0)的作用是什么?

  • Void(0)用于防止页面刷新,并在调用时传递参数"zero"
  • Void(0) 用于调用另外一种方法而不刷新页面

32.箭头函数和普通函数的区别

  1. 箭头函数是匿名函数不能作为构造函数,不能使用new操作符
  2. 箭头函数不绑定arguments获取实参的类数组,取而代之的是es6中的rest参数也就是…表示的拓展运算符解决
function fn1(x){
   
    console.log(arguments)
}
var fn2=(...x)=>{
   
    console.log(x)
}
var fn3=(x)=>{
   
    console.log(arguments)
}
fn1(10); //[Arguments] { '0': 10 }
fn2(100)  //[ 100 ]
fn3(10) //报错arguments is not defined
  1. 箭头函数没有原型属性
var fn1=()=>{
   
    return 1;
}
function fn2(){
   
    return 2;
}
console.log(fn1.prototype); //undefined
console.log(fn2.prototype) //fn2 {}
  1. 箭头函数的this永远指向其上下文的this,如使用call()、bind()、apply()只是传入了参数而已,对 this并没有什么影响也没有办法改变其指向,普通函数的this指向调用它的对象
var obj={
   
    name:'zhangsan',
    fn1:()=>{
   
        console.log(this.name); //undefined
        console.log(this)  //在浏览器中指向的是window这个全局对象
    },
    fn2:function (){
   
        console.log(this.name);  //zhangsan
        console.log(this)  //{ name: 'zhangsan', fn1: [Function: fn1], fn2: [Function: fn2] }
    },
    fn3:function (){
   
       return ()=>{
   
            console.log(this.name) //zhangsan
        }
    }
}
obj.fn1()
obj.fn2()

fn1是一个箭头函数,然后它的 this是指向window,这是为什么呢?因为箭头函数捕获的是obj{}这个对象的环境,然后这个环境的this指向的是window,在fn3方法里面return的那个箭头函数捕获的是fn3:function(){}这个环境的this,而这个环境的this是obj

33.怎么获取对象的key值

  1. 通过for in遍历对象的所有的key值
function fn(){
   
    const obj={
   name:'zhansan',age:15};
    for(let key in obj){
   
        console.log(key) //遍历的是原型链中的
     //obj3.hasOwnProperty()判断是否是该对象自己本身的属性
    if(obj.hasOwnProperty(key)){
   
        console.log(obj[key])
    }
    }
   
}
/*
name
age
*/
fn()  
  1. 通过es6中的对象的构造函数的Object.keys()方法
function fn(){
   
    const obj={
   name:'zhansan',age:15};
    console.log(Object.keys(obj)) //[ 'name', 'age' ]
}
fn()  

34. 谈谈你对原型和原型链的理解

  • js里所有的对象都有__proto__属性,对象的__proto__属性的值就是它所对应的原型对象。也可以说对象的__proto__指向自己构造函数的prototype
  • 对于函数而言,只有函数才具有prototype属性,这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。而原型对象有两个属性,一个是constructor指针指向其构造函数,一个是__proto__属性:是一个对象,指向上一层的原型。

注意点:Function.prototypeFunction.__proto__为同一个对象。Oject/Array/String等等构造函数本质上和Function一样,均继承于Function.prototype

  • 所以原型链就是由__proto__串起的路径就是原型链。原型链的尽头是Object
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值