定义对象

1
const 对象名 = {属性1,属性2,属性3...}

数组通过下标访问数据,对象通过属性名访问数据

访问数据的方法

  1. 对象名.属性名
  2. 对象名[‘属性名’] (可以用一个变量来存储属性名)

对面里面也可以存函数,这个函数叫做这个对象的方法

方法里面的 this 指向

谁调用方法,this 就代表哪个对象

数组实际上是一种特殊的对象,它们有自己的方法
例如:push,unshift

一个对象的方法如果被赋值给了其他变量,则这个变量获得的值只是一个全局的函数,并不是对象的方法本身

call

手动并明确的设置 this 关键字

call(需要指向的 this,调用方法时的参数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 初始化两个对象
const name = {
namne: "张三",
sex: "男",
arr: [],
show(name, sex) {
this.arr.push({ name: name, sex: sex });
},
};

const name2 = {
namne2: "小A",
sex: "男",
arr: [],
};

// 把name里面的函数提出来
const show2 = name.show;

//调用show2,并使用call将show方法里面的this指向name2和name
// 后面的参数是方法接收的参数
show2.call(name, "小南", "女");

show2.call(name2, "小A", "男");

name.show("小王", "男");

console.log(name);
console.log(name2);

dR9Jv.png

可以看见这里 name,和 name2 对象里面 arr 数组通过 show2 的方法添加了元素

通过 call,能够使用另一个对象里面的方法

bind()

bind 方法创建一个新的函数

在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

1
2
const show = name.show.bind(name, "小南");
//此时show等同于name对象里面的show,this会指向name对象,而后面的参数会变成新函数的参数