function Person(){}; Person.prototype={ constructor:Person, name:"Nacholas", age:29, friends:{"sun","li"}, sayName:function(){ alert(this.name); } }; var person1=new Person(); var person2=new Person(); person1.friends.push("van"); alert(person1.friends);//"sun,li,van" alert(person2.friends);//"sun,li,van"
1.Person作为一个类,会有自己的私有属性和共有属性,可以把prototype理解为共有属性。既然共有,那么就是别人也能使用改变的。
2.friends是数组,也就是引用类型的对象,push是这个数组具有的一个方法,所以调用push的时候不会改变这个对象的内存地址。但如果是直接赋值,
person1.friends="van";
改变了内存空间,实际上就是定义了私有属性,原有的共有属性不会改变!
3.属性的查找是基于原型链的,先找私有属性,再找共有属性,如果没有共有属性,就继续网上找(Object构造函数),直到顶端。
时间: 2024-12-28 04:37:44