1 每一个对象都有 -proto- 属性
2 每一个函数也是对象,是特殊的对象,所以也有-proto- 属性
3 函数比普通的对象多出一个 prototype 属性
4 prototype 属性也是一个对象,所以也有 -proto- 属性
同时还有constructor 属性。这个属性的值是包含他的那个函数
大概是这样
function (){
prototype:{
-proto-:function1,
constructor:function
}
}
function1(){
prototype:{
-proto-:function2,
constructor:function1
}
}
function2(){
prototype:{
-proto-:-------,
constructor:function2
}
}
5 new 出来的对象的 -proto- 指向他的构造函数的 prototype
6 new 出来的多个对象共享一份 prototype 数据,new出来的时候没有实现深拷贝,所以任何一个对象修改了prototyppe 都会影响到其他对象
function Person(name){
this.name = name;
}
f1.prototype.name = "翠花";
f1.prototype.age= 18;
f1.prototype.say = fuction(){
console.log("我的名字叫做"+this.name);
}
//上面是定义了原型和构造函数。
let person1 = new Person("李蛋");
let person2 = new Person("二狗子");
let person3 = new Person("狗剩");
7 person1 ,2,3 (按照java 的理解叫做重写) 重写了原型的name 属性的值。
person1 = {
-proto-:......
name:"李蛋"
}
输出person1.name 时候
1) 在person1 对象中查找那么属性
2)如果没有根据 -proto- 找到 原型中的name
然后使用原型中name。
3)原型中没有那么去原型的原型中查找。
依次类推。