js实现继承
Posted shmily-代码君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现继承相关的知识,希望对你有一定的参考价值。
js作为一种弱类型语言,继承也是其较大的功能之一
首先定义一个父类
// 定义一个教师类
function Teacher (name) {
// 属性
this.name = name || ‘Jack‘;
// 实例方法
this.study= function(){
console.log(this.name + ‘正在学习!‘);
}
}
一:继承的方式
1,原型链继承:将父类的实例作为子类的原型
function Student(){
}
Student
.prototype = new Teacher();
Student
.prototype.name = ‘john‘;
测试
var student = newStudent
();
console.log(student.name);
2,构造继承 (call,apply) 使用父类的构造函数来增强子类的实例,等同于复制父类的实例属性给子类
function Student(name) {
Teacher.call(this);
this.name = name || "Tom"
}
var student = new Student
();
console.log(student.name);
3,实例继承:为父类实例增加新特性作为子类实例返回
function Student(name){
var instance = new Teacher();
instance.name = name || ‘Tom‘;
return instance;
}
// 测试
var student = new Student();
console.log(student.name);
4,拷贝继承
function Student(name){
var teacher= new Teacher();
for(var p in teacher){
Student.prototype[p] = Teacher[p];
}
Student.prototype.name = name || ‘Tom‘;
}
// 测试
var student= new Student();
console.log(student.name);
5,组合继承 (通过调用父类的构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用
function Student(name){
Teacher.call(this);
this.name = name || ‘Tom‘;
}
Student.prototype = new Teacher();
// 测试
var student = new Student();
console.log(student.name);
6,寄生组合继承 通过寄生方式,砍掉父类的实例属性,这样,在调用两次父类的构造的时候,就不会初始化两次实例方法/属性,避免的组合继承的缺点
function Student(name){
Teacher.call(this);
this.name = name || ‘Tom‘;
}
(function(){
// 创建一个没有实例方法的类
var Super = function(){};
Super.prototype = Teacher.prototype;
//将实例作为子类的原型
Student.prototype = new Super();
})();
// 测试
var student = new Student();
console.log(student.name);
以上是关于js实现继承的主要内容,如果未能解决你的问题,请参考以下文章