js prototype属性

蔺宇
2023-12-01

function Person(name,sex) {  //Person类的构造函数  
    this.name = name;  
    this.sex = sex;  
}  
Person.prototype.age = 12;   //为Person类的prototype属性对应的prototype对象的属性赋值,  
                             //相当于为Person类的父类添加属性  
Person.prototype.print = function() { //为Person类的父类添加方法  
    alert(this.name+"_"+this.sex+"_"+this.age);  
};  
 
var p1 = new Person("name1","male"); //p1的age属性继承子Person类的父类(即prototype对象)  
var p2 = new Person("name2","male");  
 
p1.print();  //name1_male_12  
p2.print();  //name2_male_12  
 
p1.age = 34; //改变p1实例的age属性   p1属性在不指向Person的prototype属性
p1.print();  //name1_male_34  
p2.print();  //name2_male_12  
 
Person.prototype.age = 22;  //改变Person类的超类的age属性  
p1.print();  //name1_male_34(p1的age属性并没有随着prototype属性的改变而改变)  
p2.print();  //name2_male_22(p2的age属性发生了改变)  
 
p1.print = function() {  //改变p1对象的print方法  
    alert("i am p1");  
}  
 
p1.print();  //i am p1(p1的方法发生了改变)  
p2.print();  //name2_male_22(p2的方法并没有改变)  
 
Person.prototype.print = function() { //改变Person超类的print方法  
    alert("new print method!");  
}  
 
p1.print();  //i am p1(p1的print方法仍旧是自己的方法)  
p2.print();  //new print method!(p2的print方法随着超类方法的改变而改变)

 类似资料: