编程实践中,Javascript中对象可动态增加属性或方法,但是这些新增属性或方法并不会存在于兄弟对象上。
两种解决方法:
1.通过原型对象的prototype属性可以动态调整所有兄弟对象的属性或方法。
2.通过某个对象的_proto_属性,调整对象的原型,也可以起到同样的效果。
demo如下:
<script>
function Student(name,sex){
this.name=name;
this.sex=sex;
}
let student0=new Student("Jack","male");
let student1=new Student("Rosy","female");
//可以动态增加student0的属性和方法,但student1的属性没有变化
student0.age=20;
student0.add=(x,y)=>{
return x+y
};
let temp="student0:";
//for in 遍历对象存在的属性
for(let attr in student0)
temp+=attr+" ";
console.log(temp);
temp="student1:";
for(let attr in student1)
temp+=attr+" ";
console.log(temp);
//两种通过原型的方式,增加了属性和方法,student1也得到了这些属性和方法
Student.prototype.age=0;
student0.__proto__.height=0;
Student.prototype.add=(x,y)=>{
return x+y;
};
student0.__proto__.mul=(x,y)=>{
return x*y;
};
temp="student1:";
for(let attr in student1)
temp+=attr+" ";
console.log(temp);
console.log(student1.add(2,3));
</script>
console输出结果: