1.每个函数都有prototype这个属性我们称为原型对象
2.每个对象都有__proto__这个属性
3.对象的__proto__可以访问原型对象上的方法和变量,如果访问不了,就会向上进行查找,直到找不到为止,会出现报错的情况l。
let arr = [10, 20, 30, 40, 50];
console.log(arr);
可以看出在数组的原型上挂载看很多的方法。
可以看到是可以直接访问的,每个对象都有__proto__,每个函数都有自己的原型对象prototype。
把这个长的prototype展开之后可以看到有两层的结构:
首先在OBject()这个prototype上进行查找,发现没有找到就接着网Array上的prototype进行查找,在Array上发现了push方法(),查找不到的情况:
let arr = [10, 20, 30, 40, 50];
arr.pusa(60)
console.log(arr);
可以看出直接报错了。
class Cat {
constructor(name, age) {
this.name = name;
this.age = age;
}
introduce() {
console.log(`我的名字是${this.name},今年${this.age}岁`);
}
eat() {
console.log("我喜欢吃fish");
}
}
let mao1 = new Cat("小花", 20);
mao1.introduce();
console.log(mao1);
可以看出指向当前的实例化对象。
// 猫
class Cat {
constructor(name, age) {
this.name = name;
this.age = age;
}
introduce() {
console.log(this);
console.log(`我的名字是${this.name},今年${this.age}岁`);
}
eat() {
console.log("我喜欢吃fish");
}
}
// 狗
class Dog extends Cat {
constructor(name, age) {
super(name, age);
}
drin() {
console.log("我喜欢喝水");
}
}
let dog = new Dog("阿黄", 6);
console.log(dog);
调用继承过来的方法
可以访问
访问的方法是dog.eat(),如果在当前的类里面查找不了
当前的类里面只有dirnk这个方法,就会向上进行查找。
最终在Cat这个类上的原型找到了eat()这个方法。
1