JS面向对象

96 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

题外话

最近再复盘JS的一些知识点,发现代码这个东西你不看,它就不会,你不写它也不会,咱就是说一整个呗拿捏了。那对象又是JS必会的知识点,怎么办?凉拌?那不可能,那就开始复习呗

JavaScript面向对象

对象是Javascript中一个非常重要的概念,因为对象可以将多个关联的数据封装到一起,更高的描述一个事务。

比如我们描数一个人:Person,他有name,sex,height等等,或许还有一些伴随着人的动作,eat,run等等。

JavaScript其实支持多种编程范式的,

  • 包括函数式编程面向对象编程

    • JavaScript中的对象被设计成一组属性的无需集合,像一个哈希表,有keyvalue组成。
    • key是标识符名称,value可以是任意类型,也可以是其他对象或者函数类型。
    • 如果值是一个函数,那么我们可以称之为是对象的方法。

创建对象

当我们知道对象是什么之后,我们就要开始考虑如何创建一个对象

方式一:使用new创建

let obj = new Object()

obj.name"abc"
obj.age18
obj.runningfunction () {
  console.log(this.name"正在跑步");
}

obj.running()  //abc正在跑步

方式二:字面量创建

字面量创建也是我们日常开发最长使用的一种方式

let obj = {
  name"abc",
  age18,
  runningfunction () {
    console.log(this.name"正在跑步");
}
}
obj.running()  //abc正在跑步

上述创建的对象,是在定义的时候就添加了对应的属性。那我们如何对一些属性进行特殊操作呢?

对象里面的属性进行操作

直接定义在对象内部或者直接直接添加到对象内部的,无法对属性进行一些特殊操作:是否可以修改或者删除,是否不可迭代等

这样就需要使用属性描述符Object.defineProperty

  • Object.defineProperty(obj, prop, descriptor)可以接收三个参数:

    • obj,要定义属性的对象
    • prop,要定义或修改的属性的名称或Symbol
    • defineProperty 要定义或修改的属性描数符
  • 返回值:

    • 被传递给函数的对象

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

存取属性描述符

setgetvalue不能共存

  • set
  • get