function Person(name,age){
this.name=name;
this.age=age
}
Person.prototype.say=function(){
console.log('我叫'+this.name)
}
var p1=new Person('lisa',18);
p1.say();
function Coder(name,age,job){
// this.name=name;
// this.age=age;
// Person(name,age); //这样this->window
Person.call(this,name,age)
this.job=job;
}
// Coder.prototype.say=function(){
// console.log('我叫'+this.name)
// }
// Coder.prototype=Person.prototype;//不行,因为它是一个对象,我们改了一个的值另一个也会改掉
//Coder.prototype.say=Person.prototype.say;
// Coder.prototype.say=function(){
// console.log(1);
// }
//这种继承方法可以用,但是如果要继承的属性多时非常麻烦
for(var attr in Person.prototype){
// Person.prototype.hasOwnProperty(attr)如果只继承Person原型上的属性或方法就判断它
Coder.prototype[attr]=Person.prototype[attr];
}
Coder.prototype.coding=function(){
console.log('我的工作是'+this.job+',我在干活')
}
var p2=new Coder('liu',18,'前端');
p2.say();
p2.coding();
p1.say();
// 继承:让一个对象身上的属性拥有另一个对象身上的属性或者
//方法.
// 如果是属性继承: 我们通过call方法调用我们要继承的构造函数身上的属性.
// 如果是方法继承:通过forin方法继承原型上的方法
//
// 注意:继承属性时,this要用call修正一下
// 继承其它对象方法时不能直接复制
网友评论