js面试题整理(二)

59 阅读2分钟

构造函数&&实例

  • 构造函数: 通过new操作符调用的,本质上也是函数
  • 实例: 实例是通过new操作符调用函数生成的,如下面代码,p就是实例
let p = new Obj()
  • 通过new操作符可以创建一个构造函数,将这个构造函数赋值给一个变量,这个变量就是实例

原型&&原型链

  • 原型: js函数中的protype属性,称之为原型也叫原型对象,可以存放一些方法给实例使用.原型是函数所特有的
  • 原型链: 对象都有__proto__属性,这个属性指向他的原型对象,原型对象上也有__proto__属性,之后会接着指向下一个原型对象,这样形成的叫做原型链,找到最后找不到会返回null

new的过程

  • 创建一个新的对象
  • 新对象的__proto__指向构造函数的protype
  • 构造函数的this指向新对象
  • 执行构造函数内部代码
  • 返回新对象

修改this指向

call

  • 功能: 修改this指向,并立即执行函数
  • 以数组形式传递

apply

  • 功能: 修改this指向,并立即执行函数
  • 以逗号分隔的方式传递

bind

  • 功能: 修改this指向后不会立即执行函数
  • 以数组形式传递
// 修改fn2的this指向到{a:1}对象上
obj.obj1.obj2.fn2().call({a: 1},[传递的参数1])
obj.obj1.obj2.fn2().apply({a: 1},传递的参数1,传递参数2)
obj.obj1.obj2.fn2().bind({a: 1},[传递的参数1])()

cooki,localStorage和sessionstorage

  • cooki:
    • 功能: 本身是用于服务器和浏览器通讯的
    • 缺点: 存储量小只有4K,且每回都会发送到服务器
  • localStorage && sessionstorage
    • 功能: 用来进行本地存储的,最大可存储5M
    • 相比于cooki,storage存储量变大了,且不会随着请求发送出去
    • localStorage: 永久存储, 除非手动清除
    • sessionstorage: 只存在于当前会话,浏览器或页面关闭就会清空

for in && for of

  • for in 会遍历数组的所有可枚举属性,遍历后得到的是对象的key,或数组/字符串的下标
  • for of 遍历后得到的是value值,可以遍历数组,字符串等拥有迭代器对象的集合,但不能遍历对象,因为对象没有迭代器对象
let arr = ['a', 'b', 'c', 'd']
let obj = {
    a: 'apple',
    b: 'banana',
    c: 'cindy'
}
// for in 遍历的是索引,适合对象遍历
for (let key in arr) {
    console.log(key); //=> 0,1,2,3
    console.log(arr[key]); //=> a,b,c,d
}
for (let key in obj) {
    console.log(key); //=> a,b,c
    console.log(obj[key]); //=> apple, banana, cindy
}
// for of遍历的是元素值, 不能遍历对象, 适合数组遍历
for (let key of arr) {
    console.log(key); //=> a,b,c,d
    console.log(arr[key]); //=> undefined
}