js高级——原型使用的注意事项

function Person(){

}
Person.prototype.name = "张安";
Person.prototype.age = 19;

var p = new Person();
console.log(p.name);    //这个时候p对象里面还没有name这个属性,所以就在原型里面找到了“张安”

p.name = "李四";       //这个时候是添加name属性
console.log(p.name);

var p1 = new Person();
console.log(p1.name);

1、使用对象访问属性的时候,如果在自己内部找不到就会去原型中查找
2、使用“.”语法进行属性赋值的时候  不会去原型中查找
    因为根据对象的动态属性,点语法是属性存在的时候修改,不存在的时候创建


js高级——原型使用的注意事项
这个时候p访问的是李四
3、
var car = {
    brand:"laosilaisi",
    type:"huanying"
};

Person.prototype.car = car ;          //给原型对象中添加了一个car属性,并且这个car属性指向的是car这个对象

var p = new Person();
console.log(p.car.brand);

p.car.brand = "奥拓";

var p1 = new Person();
console.log(p1.car.brand);

Person.prototype.car = {      //替换了原型对象中的属性
    brand:"BYD"
};
var p2 = new Person();
console.log(p2.car.brand);

js高级——原型使用的注意事项

p对象里面没有car这个属性,所以就去原型里面找,原型里面有,找到之后就去访问地址里面的brand属性得到laosilaisi
然后再给p对象里面的car属性里面的brand属性赋值,赋值为奥拓
js高级——原型使用的注意事项

当替换原型中的属性之后:
js高级——原型使用的注意事项



4、如果在原型中的属性是引用类型,那么所有的对象共享该属性,并且一个对象修改了该引用类型属性中的成员之后,其他对象也都会受影响
5、一般情况下不会将属性放到原型对象里面,因为每一个对象都有自己的特征,也就是属性,所以每个对象都应该要有一个自己存储属性的地方,不应该所有对象共享一个属性
6、一般情况下原型中只会方需要共享的方法
7、对象可以访问原型对象里面的属性
    var p = new Person("张学友",18,"male");
    var p1 = new p.constructor("刘德华",19,"male"); //相当于直接使用new Person()
js高级——原型使用的注意事项