面向对象


class

// 创建一个类

class Person {
    name = "Eric"  // 类的属性
    age = 18
    hobby () {     // 类的方法
        console.log('make a teacher')
    }
}

// 一个类可以创建多个对象

// 因此可以说类  是 对象的模具 , 对象是 类的铸件。

// 实例化一个类

let p = new Person()  // 使用关键字 new 实例化, 实例化出来的是一个对象,该对象有类的属性和方法,方法位于原型上。

// 构造器 constructor (主要的作用是初始化数据)

class Persons {
    constructor(name, age ,sex) {
        this.name = name
        this.age = age
        this.sex = sex
    }
    
    hobbys(){
        console.log(`${this.name}的爱好是...`)
    }
}

// 给要实例化的类传入参数, 类中的构造器(constructor)可以接收到参数

*** // 至于为什么类的 constructor 能接收到 参数,以后再谈。

let p = new Person("Eric",18, "男")
// 派生类  (用于继承基类的属性 和 方法)

class Children extends Persons {
    
    // 当基类的方法不能满足派生类的需求的时候,派生类可以在自己内部 重写基类方法。
    
    // hobbys
    
    // console.log('玩游戏')
    
//  }
    
}

let child = new Children('xiaoJun',8,'男')

// 派生类可访问基类的属性和方法, 也可以重写基类的方法

child.name // xiaoJun
child.hobbys() // xiaoJun的爱好是...
// 继承构造器 (当基类的数据不能满足派生类的需求的时候,可继承构造器(相当于super调用了constructor函数),再添加自己需要的)

class Children extends Persons {
    constructor(name,age,sex, eat){
        super(name, age , sex)  // 继承
        this.eat = eat
    }
}
// 面向对象静态方法

class Worker {
    static user = "Eric"
    
    static work(){
        console.log(Worker.user + '说他的工作是教书')
    }
}

Worker.work() // Eric说他的工作是教书

// 使用静态方法不需要实例化,因此不用开辟堆栈空间,速度比对象方法快55%。

**// 静态成员不能使用非静态成员,因为使用非静态成员 ,必须实例化!

**// 若要使用,把方法或属性也改成静态的。

暴露和导出的方式

// 第一种方式  exports

// public1.js 

exports.username = 'admin'
exports.password = '123'

exports.obj = {
  name : "Eric",
  age:18,
  sex: '男'
}
exports.login = {
  username : "Eric",
  password : 123
}

exports.fun = () => {
  console.log('这是public1中的fun方法')
}

// module.js
const public = require('./public1')
console.log(public);

cmd 命令行  node  module.js 运行 ,可以看到暴露成功

// 第二种方式   module.exports

// public2.js 

let username = 'admin'
let password = '123'

let obj = {
  name : "Eric",
  age:18,
  sex: '男'
}

let login = {
  username : "Eric",
  password : 123
}

let fun = () => {
  console.log('这是public1中的fun方法')
}

module.exports =  {
  username,
  password,
  obj,
  login,
  fun
}

同module.js 运行文件,也可以看到运行成功。
// 第三种方式  export 导出,import  失败??

// public3.js
const username = 'admin'
const password = '123'

const obj = {
  name : "Eric",
  age:18,
  sex: '男'
}

const login = {
  username : "Eric",
  password : 123
}

const fun = () => {
  console.log('这是public1中的fun方法')
}

export {
  username,
  password,
  obj,
  login,
  fun
}

// module1.js

import a from './public3'

// 为什么无法引入
console.log(a);

**// 在react框架下是可以这样导出并引入的,但这里写demo却失败了,待定...
// 第四种方式

// default.js
const rect = {
  x:0,
  y:0,
  fill:'red'
}

export default rect

// import.js

import rect from './default'

console.log('rect',rect)

***// 这种方式运行也不行,但在框架中是可行的。因此后面两种无法运行应该是其他原因。

文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录