1.JavaScript 中的”类“
class Dog {
constructor(name ,age) {
this.name = name
this.age = age
}
eat() {
console.log('肉骨头真好吃')
}
}
其实完全等价于写了这么一个构造函数:
function Dog(name, age) {
this.name = name
this.age = age
}
Dog.prototype.eat = function() {
console.log('肉骨头真好吃')
}
2.理解原型和原型链
2-1 原型
- 每个构造函数都拥有一个prototype属性,它指向构造函数的原型对象。
- 这个原型对象由一个constructor属性,它指向构造函数。
- 每个实例都有一个**proto属性,当我们使用构造函数去创建实例时,实例的proto**属性就指向构造函数的原型对象。
// 创建一个Dog构造函数
function Dog(name, age) {
this.name = name
this.age = age
}
Dog.prototype.eat = function() {
console.log('肉骨头真好吃')
}
// 使用Dog构造函数创建dog实例
const dog = new Dog('旺财', 3)
// 输出"肉骨头真好吃"
dog.eat()
// 输出"[object Object]"
dog.toString()
在dog实例中没有手动定义eat()和toString(),但是还是成功被调用了,这是因为当我们视图访问一个JavaScript的属性/方法时,它先搜索这个实例本身,如果没有就去搜索实例的原型对象,如果还没有就去搜索原型对象的原型对象。