继承

作者: 爱琴宝 | 来源:发表于2016-09-12 21:11 被阅读0次

继承
概念:通过一个类,创建另一个类这样新创建出来的类不仅拥有了原来的属性和方法,而且还可以添加自己独有的属性和方法。实现自定义类的继承 (call)借用构造函数。。

call和apply是function的原型方法。可以用来调用函数他们的第一个参数表示被调函数内部的this指针的指向对象,剩下的参数则是为函数的实参。
apply函数的第二个参数是一个数组。数组表示的实参。

call 调用函数的执行。
通过call函数调用父类函数, 第一个参数是用来修改父类函数中this的指向,把this对象传递进去并执行父类函数,则父类函数中的属性及方法 子类可以继承。
子类不仅可以继承父类的属性和方法。还可以更改属性和方法。

<script type="text/javascript">
 function hello(name,age){
 console.log("hello"+name);
 console.log(age)
 }
 // hello("张三");// 传统的调用方式、
 hello.call("","许三多",12); //call 可以执行函数。
 //第一个参数:内部this的指向。
 //第二个参数:实参
 //apply 可以执行函数
 hello.apply("",["许三多",12]);
 //第一个参数:内部this的指向
 //数组中的值:实参
 </script>

通过call实现 继承的代码:

<script type="text/javascript">
 function Animal(name,age) {
 this.name = name;
 this.age = age;
 this.eat1 = function(){
 console.log("what eat?")
 }
 }
 function Dog(name,age,leg){ //设置形参 接受实参
 Animal.call(this,name,age);//继承了Animal的属性及方法。
 this.leg = leg;
 this.eat1 = function(){
 console.log("喜欢吃骨头");
 }
 this.lookdoor=function(){
 console.log("看门狗");
 }
 }
 var one = new Dog("小黑",3,4);
 console.log("我家的小狗叫:"+one.name+",今年"+one.age+"岁。有"+one.leg+"条腿。");
 one.eat1(); //修改后的方法 喜欢吃骨头
 one.lookdoor(); //看门狗
 </script>```
  组合继承的实现思路:使用call来继承实例属性,使用原型链来继承原型方法
组合继承(包括call和原型链的继承方式):

<script type="text/javascript">
function Animal(name,age) {
this.name = name;
this.age = age;
this.eat1 = function(){
console.log("what eat?")
}
}
Animal.prototype.gender ="男";
Animal.prototype.haha = function(){
console.log("haha");
}
function Dog(name,age,leg){
//使用call来继承实例属性
Animal.call(this,name,age);
this.leg = leg;
this.lookdoor=function(){
console.log("看门狗");
}
}
//使用原型链继承原型方法。
Dog.prototype = new Animal(); //Dog的原型指向Animal;继承了父类。
Dog.prototype.constructor = Dog;//让子类的原型指向子类的构造函数 修正了继承关系
var one = new Dog("小黑",23,4);
var two = new Dog("小白",23,3);
console.log(one.name);
console.log(two.name)
one.eat1();
console.log(one.gender);//原型的链
one.haha();
console.log(one.constructor == Dog)//测试实例对象是是否是子类构造函数所创建的
</script>```
通过冒充实现继承:

 <script type="text/javascript">
 //冒充继承
//注:不能继承父类的原型对象及方法
 function Person(name,age){
 this.name = name;
 this.age = age;
 }
 Person.prototype.gender = "男";
 Person.prototype.run = function(){
 console.log("快走")
 }
 function Student(name,age,hobby){
 //通过冒充实现子类继承父类的方法和属性
 this.newFn = Person; //给this添加一个新的函数 也就是父类
 this.newFn(name,age ); //执行新添加进去的函数,通过this.newFn调用父类,进而修改了父类中的this的指向
 delete this.newFn; // 修改完指针的指向后可以把新添加的方法删掉
            //继续添加新的属性和方法
 this.hobby = hobby;
 this.study = function(){
 console.log("学习");
 }
 }
 var one = new Student("张三",21,"篮球");
 console.log(one.name+";"+one.age+";"+one.hobby);
 one.study();
</script>```

相关文章

  • 继承 继承

    属性拷贝 继承不单单能通过原型链实现,也能通过其他方式实现,属性拷贝就是其中一种方法。 通过属性拷贝也能实现继承子...

  • 继承(单继承,多继承)

    将共性的内容放在父类中,子类只需要关注自己特有的内容 python中所有的内容都是对象,所有的对象都直接或间接继承...

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • Python-学习之路-08 OOP -02

    单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类可以继承多个类 单继承的多继承的优缺点 菱形继承/钻石...

  • 原型相关(二)

    1.继承 继承方式:接口继承(只继承方法签名)实现继承(继承实际的方法)ECMAScript只支持实现继承,并且主...

  • 继承

    继承的引入和概述 继承案例和继承的好处 继承的弊端 Java中继承的特点 继承的注意实现和什么时候使用继承 继承中...

  • Java面向对象三大特性之继承

    继承 一、继承的特点 Java只支持单继承单继承 多继承 单继承、多继承优缺点①单继承优点:提高了代码的复用性,让...

  • 7、面向对象的程序设计3(《JS高级》笔记)

    三、继承 许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际方法。由...

  • 【重学前端】JavaScript中的继承

    JavaScript中继承主要分为六种:类式继承(原型链继承)、构造函数继承、组合继承、原型式继承、寄生式继承、寄...

  • js之继承

    文章主讲 JS 继承,包括原型链继承、构造函数继承、组合继承、寄生组合继承、原型式继承、 ES6 继承,以及 多继...

网友评论

      本文标题:继承

      本文链接:https://www.haomeiwen.com/subject/jyapettx.html