持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
题外话
最近再复盘JS的一些知识点,发现代码这个东西你不看,它就不会,你不写它也不会,咱就是说一整个呗拿捏了。那对象又是JS必会的知识点,怎么办?凉拌?那不可能,那就开始复习呗
JavaScript面向对象
对象是
Javascript中一个非常重要的概念,因为对象可以将多个关联的数据封装到一起,更高的描述一个事务。
比如我们描数一个人:Person,他有name,sex,height等等,或许还有一些伴随着人的动作,eat,run等等。
JavaScript其实支持多种编程范式的,
-
包括函数式编程和面向对象编程:
JavaScript中的对象被设计成一组属性的无需集合,像一个哈希表,有key和value组成。key是标识符名称,value可以是任意类型,也可以是其他对象或者函数类型。- 如果值是一个函数,那么我们可以称之为是对象的方法。
创建对象
当我们知道对象是什么之后,我们就要开始考虑如何创建一个对象
方式一:使用new创建
let obj = new Object()
obj.name = "abc"
obj.age = 18
obj.running = function () {
console.log(this.name + "正在跑步");
}
obj.running() //abc正在跑步
方式二:字面量创建
字面量创建也是我们日常开发最长使用的一种方式
let obj = {
name: "abc",
age: 18,
running: function () {
console.log(this.name + "正在跑步");
}
}
obj.running() //abc正在跑步
上述创建的对象,是在定义的时候就添加了对应的属性。那我们如何对一些属性进行特殊操作呢?
对象里面的属性进行操作
直接定义在对象内部或者直接直接添加到对象内部的,无法对属性进行一些特殊操作:是否可以修改或者删除,是否不可迭代等
这样就需要使用属性描述符:Object.defineProperty
-
Object.defineProperty(obj, prop, descriptor)可以接收三个参数:obj,要定义属性的对象prop,要定义或修改的属性的名称或SymboldefineProperty要定义或修改的属性描数符
-
返回值:
- 被传递给函数的对象
Object.defineProperty()
- 使用
Object.defineProperty()创建对象属性
let obj = {
name: "abc"
}
Object.defineProperty(obj, "age", {
value: 18
})
console.log(obj); //{name: "abc", age: 18}
属性描述符类型:数据属性 ,存取属性
数据属性:
- configurable:表示属性是否可以通过
delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符。 - enumerable:表示属性事都可以通过
for-in或者Object.key返回该属性,也就是是否可枚举 - writable:表示事都可以修改属性的值
- value:属性的
value值
存取属性描述符
set,get和value不能共存
- set
- get