前端容易忘记的知识点

这里写目录标题

  • 1. Object.assgin 方法
  • 2. 转化为数组的几个方法:slice.call() , Object.keys()
  • 3.function 的call(), aplly

1. Object.assgin 方法

#方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。
#它将返回目标对象。
const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

引用:https://www.jianshu.com/p/d5f572dd3776

2. 转化为数组的几个方法:slice.call() , Object.keys()

# 在这里call方法相当与把slice()绑定到lis对象上
1. [].slice.call(lis):#将伪数组转换为真数组,lis.slice()

#Object.keys(obj) 将对象可枚举的属性转化为数组
2. 
<script>
 const obj = {
    firstName: 'A',
    lastName: 'B'
  }
  const names = Object.keys(obj)
  console.log(names[0].firstName)
 </script>
#结果:Array(2)
		0: "firstName"
		1: "lastName"
		length: 2
		 __proto__: Array(0)

3.function 的call(), aplly

#这三个方法都可以改变this的指向,都可以进行传参,第一个参数都是修改this的指向
call()apply() 改变this指向后会立即执行函数
bind() 改变this指向后不会立即执行
call()apply() 区别在于参数
    · call() 第一个参数是修改的this指向,后续的参数都是传入该函数的值,他的传值只能一个个传

    · apply() 第一个参数是修改的this指向,第二个参数是一个数组,所有传入该函数的值都放到该数组中

#javacript 在函数内部的this在很多情况下很难看出是那个对象的,当this调用函数的时候,经常出现unfined
1. method.call(obj): 可以函数指定对象,
例子:
var x=10;  
var o ={ x: 15 };  
function foo(){  
    alert(this.x);  
}  
  
foo();         // 10  
foo.call(o);   // 15  

#apply()和call()一样都是函数绑定对象,不同在于参数不同
#调用apply方法的时候,第一个参数为obj,第二个参数为数组
#调用call()方法的时候,第一个参数objc,后面参数依次传入
2.un.apply(obj,[2,3]);
  un.call(obj,2,3);
3
//对于call
boy.say.call(girl);

//对于apply
boy.say.apply(girl);

//对于bind
boy.say.bind(girl)();

你可能感兴趣的:(前端,解决各种bug)