继承: 1.通过修改原型对象的指向实现继承 缺陷:所有的属性都是一样的 2.借用构造函数实现继承 构造函数名字.call(当前对象,属性1,属性2...) 缺陷:虽然可以实现属性的不同 但是方法不能继承 3.组合继承:原型对象+借用构造函数 属性可以不重复,方法也可以继承 4.拷贝继承:把一个对象中的属性和方法自己拷贝到另一个对象中 使用for-in 循环,将一个对象中的所有属性和方法赋值给另一个对象
1.修改原型对象的指向实现继承 //人的构造函数 function Person(name,age,sex) { this.name=name this.age=age this.sex=sex } Person.prototype.eat=function () { console.log("恰饭"); } //学生的构造函数 function Student(score) { this.score=score } //改变指向 Student.prototype=new Person("小萌",16,"女") //通过原型添加学习方法 Student.prototype.study=function () { console.log("打游戏"); } //实例化学生对象 var stu=new Student(61) console.log(stu.name); console.log(stu.age); console.log(stu.sex); stu.eat() console.log("学生对象下自己的属性==="); console.log(stu.score); stu.study() var stu1=new Student(59) console.log(stu1.name, stu1.age, stu1.sex, stu1.score);
2.借用构造函数实现继承
//人的构造函数 function Person(name,age) { this.name=name this.age=age//this 指的是当前的实例对象 } //通过原型对象添加eat方法 Person.prototype.eat=function () { console.log("恰饭"); } //学生的构造函数 function Student(score,name,age) { Person.call(this,name,age) this.score=score this.name=name this.age=age } Student.prototype.study=function () { console.log("恰饭"); } var stu1=new Student(60,"小萌",16) console.log(stu1.name, stu1.age, stu1.score); var stu2=new Student(69,"小洁",18) console.log(stu2.name, stu2.age, stu2.score); var stu3=new Student(80,"薇薇安",20) console.log(stu3.name, stu3.age, stu3.score);
3.组合继承:原型对象+借用构造函数
/创建人的构造函数 function Person(name,age) { this.name=name this.age=age } Person.prototype.eat=function () { console.log(this.age+"恰饭恰饭"); } //创建学生函数 function Student(name,age,score) { Person.call(this,name,age) this.score=score } //修改原型指向 Student.prototype=new Person()//不传值 Student.prototype.study=function () { console.log(this.name+"玩游戏,玩到老"); } var stu1=new Student("小萌",16,80) console.log(stu1.name, stu1.age, stu1.score); stu1.study() stu1.eat() var stu2=new Student("小洁",17,90) console.log(stu2.name, stu2.age, stu2.score); stu2.study() stu2.eat() var stu3=new Student("薇薇安",18,100) console.log(stu3.name, stu3.age, stu3.score); stu3.study() stu3.eat()
4.拷贝继承:把一个对象中的属性和方法自己拷贝到另一个对象中
function Person() { } Person.prototype.name="李靖" Person.prototype.age=18 Person.prototype.sex="男" Person.prototype.tuoTa=function () { console.log("托塔李天王"); } var obj2={} for (var key in Person.prototype){ obj2[key]=Person.prototype[key] } console.dir(obj2); var key="name属性" var key="age属性" var key="sex属性" var key="tuota方法名" //获取对象的属性 对象:属性名 对象["属性"] for (var key in Person.prototype){ console.log(key + "======" + Person.prototype); }