- js的构造函数(在别的后台语言上叫做类)上可以添加一些成员,可以在构造函数内部的this上添加,可以在构造函数本身上添加,通过这两种方式添加的成员,就分别成为实例成员和静态成员。
实例成员和静态成员
- 实例成员: 构造函数中this上添加的成员
- 静态成员: 构造函数本身上添加的成员
function Person(name, age) {
this.name = name
this.age = age
this.sayHi = function () {
console.log('Hi...')
}
}
Person.hobby = 'running'
Person.climb = function () {
console.log('Climbing...')
}
Person.prototype.jump = function () {
console.log('Jumping...')
}
const p1 = new Person('Lucy', 20)
console.log(p1.name)
console.log(p1.age)
p1.sayHi()
p1.jump()
Person.climb()
Person.hobby()
p1.climb()
Person.sayHi()
Person.jump()
总结
- 实例成员,只能由实例化的对象来访问
- 静态成员,只能由构造函数本身来访问
- 实例化对象__proto__指向构造函数的prototype属性指向的对象,实例化的对象可以访问到它后者身上的成员
实例化对象的原型链和构造函数的原型链
易错点:
- p1是手动创建的,没有constructor属性,p1.constructor访问的是Person.prototype上的constructor属性
- Function是自己创建的自己,Function.constructor指向自己
- Object对象是Function创建的
- 每个构造函数、普通函数和Function都有自己的prototype属性
- Function.__proto__指向Object.prototype,Object.prototype的__proto__指向null