JavaScript实现java中的|接口|继承|抽象类|继承|多态|对象|工厂模式|重写|重载|
时间:2022-05-06
本文章向大家介绍JavaScript实现java中的|接口|继承|抽象类|继承|多态|对象|工厂模式|重写|重载|,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
//定一个接口方法,
var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error('this instance interface constructor arguments must be 2 length!');
}
this.name = name ;
this.methods = [] ;
for(var i = 0,len = methods.length ; i <len ; i++){
if( typeof methods[i] !== 'string'){
throw new Error('the Interface method name is error!');
}
this.methods.push(methods[i]);
}
}
Interface.ensureImplements = function(object){
if(arguments.length < 2 ){
throw new Error('Interface.ensureImplements method constructor arguments must be >= 2!');
}
for(var i = 1 , len = arguments.length; i<len; i++ ){
var instanceInterface = arguments[i];
if(instanceInterface.constructor !== Interface){
throw new Error('the arguments constructor not be Interface Class');
}
for(var j = 0 ; j < instanceInterface.methods.length; j++){
var methodName = instanceInterface.methods[j];
if( !object[methodName] || typeof object[methodName] !== 'function' ){
throw new Error("the method name '" + methodName + "' is not found !");
}
}
}
}
//定义一个继承的方法
var self_extend=function(child,parent){//原型继承方法,如需继承非原型方法,用parent_obj.call(this,())//还能实现多继承
var F = new Function();
F.prototype=parent.prototype;
child.prototype=new F();
child.prototype.constructor=child;
child.superClass=parent.prototype;
if(parent.prototype.constructor==Object.prototype.constructor){
parent.prototype.constructor=parent;
}
}
var create_car={//车的工厂类
create_car:function(type){
var car=eval('new '+type+' () ');//多态
Interface.ensureImplements(car,car_interface)
return car;
}
}
function car_shop(){//买车的父类
}
car_shop.prototype={
constructor:car_shop,
sell_car:function(type){
this.abstract_sell_car(type);
},
abstract_sell_car:function(){//抽象方法,子类实现
throw new Error("this method is abstract");
}
}
function benz_car_shop(){//各类汽车店,重写父类的方法
}
self_extend(benz_car_shop,car_shop);
benz_car_shop.prototype={
constructor:benz_car_shop,
sell_car:function(type){//覆盖父类的方法
var car;
var types=["benz"];
for(t in types){
if(types[t]===type){
car = create_car.create_car(type);
}else{
throw new Error("车店没有类型");
}
}
return car;
}
}
//车实现两个方法,然后四种子类汽车继承
var car_interface=new Interface('car_interface',["start","run"]);
function base_car(){
}
base_car.prototype={
constructor:base_car,
start:function(){
console.log(this.constructor.name+" this is start")
},
run:function(){
console.log("this is running")
}
}
function benz(){};
self_extend(benz,base_car);//继承父类
benz.prototype.drive_benz=function(){
console.log("benz driver");
}
function bwm(){};
self_extend(bwm,base_car);
function audi(){};
self_extend(audi,base_car);
var shop1=new benz_car_shop();
var car1=shop1.sell_car("benz");//多态
car1.start();
- 浅谈应用型机器学习作为一种搜索问题
- 自相关和偏自相关的简单介绍
- 机器学习中分类与回归的差异
- 自然语言处理指南(第1部分)
- GreenDao 兼容升级,保留旧数据的---全方面解决方案
- 基于 xorm 的服务端框架 XGoServer
- 全面总结: Golang 调用 C/C++,例子式教程
- 架构之路(六):把框架拉出来
- 第二届游戏运营技术论坛——云时代的游戏运营之道
- 如何才能准确测量 APP 的功耗?
- 可用性更高:设计优秀的MySQL和Percona XtraDB集群
- 如何使用scikit-learn在Python中生成测试数据集
- OpenStack Neutron之持续测试
- 干货丨 用 Python 进行股票分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux expect 自动登录交换机保存配置的方法
- CentOS7安装mysql5.7解压缩版简明教程
- Gunicorn Django部署配置方法
- Linux中使用NTP保持精确时间的方法详解
- LNMP环境下搭建yum的方法分析
- django 利用pillow 进行简单的设置验证码功能(python)
- Centos环境下安装Zend optimizer 3.3.9的方法
- Linux curl表单登录或提交与cookie使用详解
- Linux磁盘设备与LVM管理命令示例详解
- Ubuntu基础教程之apt-get命令
- Ubuntu18.04.2下安装 RTX2080 Nvidia显卡驱动的方法
- linux进程监控与自动重启的简单实现方法
- Linux 解决Deepin无法在root用户启动Google Chrome浏览器的问题
- 在Linux上安装和使用Docker的方法
- centOS7 NET模式设置静态Ip的方法步骤