JavaScript对象和类

对象和类

获取对象的属性名

Object .keys获取当前对象中的属性名,返回值是一个数组

// 用于获取对象自身的所有属性
      var obj = {
        id: 1,
        name: '牛牛',
        price: 1000,
        num: 200,
      }

      var arr = Object.k eys(obj)
      console.log(arr)
Object.difineproperty

Object.difineproperty设置或者修改对象中的属性

 // Object.difineproperty设置或者修改对象中的属性
      var obj = {
        id: 1,
        name: '小米手机',
        price: 1999,
      }
      // 以前给对象添加或修改属性的方法
      // obj.num = 1000
      // obj.price = 99
      // console.log(obj)

      // Object.difineproperty定义新属性
      Object.defineProperty(obj, 'num', {
        value: 1200,
        // 允许遍历  如果值为false 不允许遍历
        enumerable: true,
      })
      // console.log(obj)
      // 修改属性
      Object.defineProperty(obj, 'price', {
        value: 9.9,
      })
      // console.log(obj)

      Object.defineProperty(obj, 'id', {
        // 值为false 不允许修改这个属性值  默认值为false
        writable: false,
      })
      obj.id = 2
      // console.log(obj)

      Object.defineProperty(obj, 'address', {
        value: '北京昌平',
        // 值为false 不允许修改这个属性值  默认值为false
        writable: false,
        // 允许遍历  如果值为false 不允许遍历  默认值为false

        enumerable: false,
        // 如果为false 不允许删除这个属性 不允许再修改第三个参数里面的特性  默认为false
        configurable: false,
      })

      console.log(obj)
      console.log(Object.keys(obj))
      delete obj.address
      console.log(obj)
      delete obj.name
      console.log(obj)
面向过程

面向过程是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就行了

面向对象

面向对象是把事务分解成一个一个对象,然后由对象之间分工与合作

衣服

洗衣机

面向过程: 不易维护,不易复用
面向对象:  易维护,易复用,面向对象有封装,继承,多态的特性,使系统更加灵活

在ES6中新增加了类的概念,可以用class关键字声明一个类,之后用这个类来实例化对象,类抽象了对象的公共部分,指某一大类对象,通过实例化一个具体的对象

类是构造函数的语法糖(简写)

创建类

语法

//  1 使用class关键字  class 类名{}
      class Star {}

      // 2使用定义的类创建实例  使用new关键字
      var s = new Star()

代码

 // //  1 使用class关键字  class 类名{}
      // class Star {}

      // // 2使用定义的类创建实例  使用new关键字
      // var s = new Star()

      // 创建类   创建一个明星类
      class Star {
        // 类的共有属性放到 constructor
        // 类实例化对象时候执行constructor
        // constructor 是构造器 或者构造函数
        constructor(name, age) {
          this.name = name
          this.age = age
        }
      }

      var ldh = new Star('刘德华', 18)
      console.log(ldh)

      // 结果 类创建的对象 和构造函数创建对象的结果是一样的

在这里插入图片描述

类中添加方法
// 创建类   创建一个明星类
      class Star {
        // 类的共有属性放到 constructor
        // 类实例化对象时候执行constructor
        // constructor 是构造器 或者构造函数
        constructor(name, age) {
          this.name = name
          this.age = age
        } 
        // ---类里面所有的函数不需要写function
        // ----多个函数之间不需要添加逗号分割
        sing(song) {
          console.log(this.name + song)
        }
      }

      var ldh = new Star('刘德华', 18)
      var zxy = new Star('张学友', 20)
      // console.log(ldh)

      ldh.sing('冰雨')
      zxy.sing('李香兰')

      // 结果 类创建的对象 和构造函数创建对象的结果是一样的
总结
  • 通过class关键字创建类,类名的首字母要大写
  • 类里面有个constructor函数,可以接收传递过来的参数,返回实例对象
  • constructor函数只要new生成实例时,就会自动调用这 个函数,如果我们不写这个函数,类也会自动生成这个函数
  • 多个函数之间不需要用逗号分割
  • 生成实例new 不能省略
  • 创建类,类名后面不能加小括号,生成实例,类名后面加小括号,类里面的函数不需要加function
类的继承

语法

class Father{
    //父类
}
class Son extends Father{ 
  //子类继承父类
}
// super 关键字调用父类普通函数
      // class Father {
      //   constructor(x, y) {
      //     this.x = x
      //     this.y = y
      //   }
      //   say() {
      //     return '我是爸爸'
      //   }
      // }

      // class Son extends Father {
      //   say(x, y) {
      //     // super(x, y) //调用了父类中的普通函数
      //     console.log('我是儿子')
      //     console.log(super.say() + '的儿子')
      //   }
      // }

      // var son = new Son()
      // son.say()
      // 继承中属性或者方法的查找原则  就近原则
      // 继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的
      // 继承中,子类没有,就去查找父类有没有这个方法,如果有就去执行父类的方法

      // 如果子类想要继承父类的方法,同时在自己内部扩展自己的方法,利用super调用父类的构造函数,必须在
      // 子类this之前调用

      class Father {
        constructor(x, y) {
          this.x = x
          this.y = y
        }
        say() {
          console.log('我是爸爸')
          return '我是爸爸'
        }
      }

      class Son extends Father {
        constructor(x, y) {
          super(x, y)
        }
        // say() {
        //   console.log('say')
        // }
      }
      var s = new Son(34, 4)
      s.say()

      // this指向问题  类里面共有的属性和方法 一定要加this使用
      // 1constructor中的this指向new出来的实例对象
      // 2 自定义方法 一般也指向new出来的实例对象
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值