JavaScript的继承实现
1、何为继承
继承简单来说就是子承父业,所谓的子,就是子类,可以通过继承来得到父类的属性和方法,并且可以拥有属于自己的方法和属性。所谓的父,就是父类,也被称为基类,是其子类的根本,也就是说,父类一般就是他所有子类的共同点。
2、继承有何用
学过面向对象的,应该比较了解继承,毕竟这是面向对象思想中的一块基石,通过继承可以减少我们很多冗余的代码, 这样便可以减少我们对内存空间的占用,来达到高效的执行效率。
3、JavaScript如何实现
我们都只到在java中我们可以通过关键字extends来完成继承的操作,也就是如下的操作:
package com.sanphantom;
public class father {
}
public class child extends father {
}
并且继承主要是类与类之间的关系,而在JavaScript中没有类的概念,但是我们JavaScript有对象,所以我们我们可以把继承的概念转换到对象上面来,这便是JS的继承了。
这接下来,话不多说,直接举例:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.eat = function () {
console.log("我需要吃饭");
};
function Student() {}
//通过原型对象的指向来完成继承
Student.prototype = new Person("小明", 18, "男");
let stu = new Student();
console.log(stu.name);
stu.eat();
在上面代码中,明显的看到了一个注解,那个注解下面的语句便是一种继承的方式,通过原型对象的指针来完成继承。但是这样有一个弊端,便是这种继承之后,他的属性就固定不变了。如果想要继承属性,则需要使用call( )方法。
call()方法:该方法有两种值来作为传递,一个是this 指针,一个便是属性名。此方法用作子对象的构造函数中,通过父对象来进行调佣。例如Person.call(this, name, age, sex);
当两者结合之后,便可以完全的继承父对象的属性和方法了。
function Animal(name, weight) {
this.name = name;
this.weight = weight;
}
Animal.prototype.eat = function () {
console.log("我必须要吃点东西了");
};
function Dog(name, weight) {
Animal.call(this, name, weight)
//call方法就是把dog里面的属性指向指到Animal构造函数里
}
Dog.prototype = new Animal();
Dog.prototype.say = function () {
console.log("在不给我吃的,我就汪汪叫");
};
let dog1 = new Dog("萨摩耶", "40kg");
let dog2 = new Dog("泰迪", "20kg");
console.log(dog1.name);
console.log(dog2.weight);
dog1.eat();
其中输出结果为:
萨摩耶
20kg
我必须要吃点东西了