构造函数的推荐写法:
//只写 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的好处:
- new 帮你创建一个新对象
- new 帮你准备 Person.共有属性(不要问属性名)
- new 帮你关联隐藏属性与共有属性
- 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)
思考
- 共有属性一定是函数吗?
不一定,也可以在非class写法当中实现有属性 eg:Person.prototype.种族= '人类'
- 自有属性一定不是函数吗?
不一定,在闭包的时候自有属性需要是函数
- Person.共有属性,是什么时候创建的?
是在Person被创建的时候就被创建了