Object 概述
Object 是 JavaScript 的一种 数据类型 。它用于存储各种键值集合和更复杂的实体。
Objects 可以通过 对象字面量
、构造函数
或者 class
的方式创建
一、对象字面量 ({…})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
let user = {
name: "Lucy",
sayHi(){
console.log(this.name) // Lucy, this指的是“当前的对象”
}
}
user.sayHi() // Lucy
// 箭头函数
// 这是箭头函数的一个特性,当我们并不想要一个独立的 this,反而想从外部上下文中获取时,它很有用。
let user = {
name: "Lucy",
sayHi() {
let arrow = () => console.log(this.name);
arrow();
}
};
user.sayHi(); // Lucy
|
二、构造器 + new
常规的 {…} (字面量) 语法允许创建一个对象。但是我们经常需要创建许多类似的对象,例如多个用户或菜单项等。
这可以使用构造器(构造函数)和new操作符来实现。
从技术上讲,任何函数(除了箭头函数
,它没有自己的 this
)都可以用作构造器。
即可以通过 new 来运行,它会执行上面的算法。
首字母大写
是一个共同的约定,以明确表示一个函数将被使用 new
来运行。
#. 约定
构造函数在技术上是常规函数。不过有两个约定:
- 它们的命名以
大写字母
开头。
- 它们只能由
new
操作符来执行。
#. 实列
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function User(name) {
// this = {};(隐式创建)
// 添加属性到 this
this.name = name;
this.isAdmin = false;
// return this;(隐式返回)
}
const val1 = new User("Jack");
console.log(val1) //{name: "Jack", isAdmin: false, constructor: Object}
|
等同于字面量Object
1
2
3
4
5
6
7
|
let user = {
name: "Jack",
isAdmin: false
}
console.log(user) //name: "Jack", isAdmin: false}
|
三、class + new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class ClassMates{
constructor(name,age){
this.name=name;
this.age=age;
}
displayInfo(){
return this.name + "is " + this.age + " years old!";
}
}
// 用法:
let classmate = new ClassMates("Mike Will",15);
classmate.displayInfo(); // result: Mike Will is 15 years old!
// 其实class也是一个function
console.log(typeof ClassMates); // function
|