JS 中的构造函数和类

79 阅读1分钟

构造函数的推荐写法:

//只写 Person的自有属性
function Person(name = '匿名', age = 0) {
  this.name = name
  this.age = age
}
//只写 Person的共有属性
 Person.prototype = {
    constructor: Person,
    sayHi() {
      console.log(`你好,我是 ${this.name}`)
    },
    run() {
      console.log(`${this.name} 在跑步`)
    }
  }
  const f1 = new Person('fang',18)
  f1.sayHi()
  f1.run()

用new的好处:

  1. new 帮你创建一个新对象
  2. new 帮你准备 Person.共有属性(不要问属性名)
  3. new 帮你关联隐藏属性与共有属性
  4. new 帮你 return 新对象

构造函数由Class的推荐实现方法:

// 自有
class Person {
  constructor(name = '匿名', age = 0) {
    this.name = name
    this.age = age
  }
// 共有
  sayHi() {
    console.log(`你好,我是 ${this.name}`)
  }
  run() {
    console.log(`${this.name} 在跑步`)
  }
}

tips:

  • 共有一个非函数属性 class 写法做不到
  • 直接给Person函数添加一个属性 class写法不推荐推荐使用static
  • 想要对函数精确控制推荐第一种写法,想要代码量少的写法推荐第二种
  • 箭头函数不能当构造函数(不支持this,不自带prototype)

思考

  1. 共有属性一定是函数吗?

不一定,也可以在非class写法当中实现有属性 eg:Person.prototype.种族= '人类'

  1. 自有属性一定不是函数吗?

不一定,在闭包的时候自有属性需要是函数

  1. Person.共有属性,是什么时候创建的?

是在Person被创建的时候就被创建了