分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

js实现继承

发布时间:2023-09-06 01:23责任编辑:郭大石关键词: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 = new Student();
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实现继承

原文地址:http://www.cnblogs.com/shmily-code/p/7808608.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved