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、使用“.”语法进行属性赋值的时候 不会去原型中查找
因为根据对象的动态属性,点语法是属性存在的时候修改,不存在的时候创建
这个时候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);
p对象里面没有car这个属性,所以就去原型里面找,原型里面有,找到之后就去访问地址里面的brand属性得到laosilaisi
然后再给p对象里面的car属性里面的brand属性赋值,赋值为奥拓
当替换原型中的属性之后:
4、如果在原型中的属性是引用类型,那么所有的对象共享该属性,并且一个对象修改了该引用类型属性中的成员之后,其他对象也都会受影响
5、一般情况下不会将属性放到原型对象里面,因为每一个对象都有自己的特征,也就是属性,所以每个对象都应该要有一个自己存储属性的地方,不应该所有对象共享一个属性
6、一般情况下原型中只会方需要共享的方法
7、对象可以访问原型对象里面的属性
var
p =
new Person("张学友",18,"male");
var
p1 =
new p.constructor("刘德华",19,"male");
//相当于直接使用new Person()