<script>
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.getName=function(){
alert(this.name);
};
Person.prototype.getAge=function(){
alert(this.age);
};
function Worker(name,age,job){
this.job=job;
//子类调用父级构造函数初始化属性,this代表一个new出来的Worker对象,
}
Worker.prototype[i]=Person.prototype[i]; //通过原型继承父级方法
}
}
Worker.prototype.getJob=function(){
alert(this.job);
};
var man=new Worker("hkj","12","程序猿");
man.getJob();
</script>
原型链不可用解释:
var a=new Array[1,2,3,4];
var b=a;
b.push(3);
结果:a==b==[1,2,3,4,3];
var b = a;属于引用传递,用形象的方法表示就是一个房间存了1,2,3,4四个数据a则是打开房间的钥匙,后来复制了一个钥匙给b,当b对房间进行操作时所有数据都会有影响。
Worker.prototype=Person.prototype; //表面上像是复制了原型参数,其实是复制了引用,子类会对父类产生影响,所以此方式不可用
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.getName=function(){
alert(this.name);
};
Person.prototype.getAge=function(){
alert(this.age);
};
function Worker(name,age,job){
this.job=job;
Person.call(this,name,age); //call和apply方法作用相同,只不过一个传入为数组,一个为参数列表
var args = [name,age];
Person.apply(this,args); //this可换成其他任何对象,表现当前对象指向了Person对象,俗称引用传递
//构造函数伪装//子类调用父级构造函数初始化属性,this代表一个new出来的Worker对象,
}
Worker.prototype=Person.prototype; // //原型链:通过原型继承父级方法
Worker.prototype=new Person(); //第二种原型链方式
for(var i in Person){Worker.prototype[i]=Person.prototype[i]; //通过原型继承父级方法
}
}
Worker.prototype.getJob=function(){
alert(this.job);
};
var man=new Worker("hkj","12","程序猿");
man.getJob();
</script>
原型链不可用解释:
var a=new Array[1,2,3,4];
var b=a;
b.push(3);
结果:a==b==[1,2,3,4,3];
var b = a;属于引用传递,用形象的方法表示就是一个房间存了1,2,3,4四个数据a则是打开房间的钥匙,后来复制了一个钥匙给b,当b对房间进行操作时所有数据都会有影响。
Worker.prototype=Person.prototype; //表面上像是复制了原型参数,其实是复制了引用,子类会对父类产生影响,所以此方式不可用