js中实现多态

多态的实现可以采用和继承类似的方法。首先定义一个抽象类,其中调用一些虚方法,虚方法在抽象类中没用定义,而是通过其具体的实现类来实现。

如下面的例子:

Object.extend=function(destination,source){
	for(property in source){
		destination[property]=source[property];
	}
	return destination;
}
//定义一个抽象基类base,无构造函数
function base(){};

base.prototype={
    initialize:function(){
    	this.oninit();//调用了一个虚方法
    }
}
function SubClassA(){
	//构造函数
}
SubClassA.prototype=Object.extend({
	propInSubClassA:"propInSubClassA",
	oninit:function(){
		alert(this.propInSubClassA);
	}
},base.prototype);

function SubClassB(){
	//构造函数
}
SubClassB.prototype=Object.extend({
	propInSubClassB:"propInSubClassB",
	oninit:function(){
		alert(this.propInSubClassB);
	}
},base.prototype);

var objA=new SubClassA();
objA.initialize();//输出"propInSubClassA"

var objB=new SubClassB();
objB.initialize();//输出"propInSubClassB"

首先定义了一个抽象基类base,在base类的initialize方法中调用了oninit方法,但是基类中并没用oninit方法的实现或者声明。SubClassA和SubClassB类继承自base类,并且分别采用了不同的方式对oninit方法进行实现。

js中实现多态

时间: 2024-07-31 14:28:13

js中实现多态的相关文章

《JS中的面向对象技术》

内容要点: 1.什么是对象:JS权威指南学习总结-第六章 ,(有句话:一切都是对象) 2.什么面向对象 使用对象时,只关注对象提供的功能,不关注其内部细节,比如jQuery.面向对象是一种通用思想,并非只有编程中使用,任何事情都可以用. 3.JS中面向对象三大特征: 封装.继承.多态 4.JS自定义对象(三大对象两大属性): 4.1创建对象方式:方法1:对象初始化的方法,就是通过对象直接量创建的对象.方法2:通过关键字new和构造函数的方法创建对象 4.2对象属性定义:私有属性.对象属性.类属性

js中的面向对象程序设计

面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值.对象或者函数.可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法). 1.json格式的面向对象,一个命名空间:适合模块化开发插件.不同的模块使用不同的命名空间.也可用于小型

JavaScript面向对象(一)——JS OOP基础与JS 中This指向详解

  前  言 JRedu 学过程序语言的都知道,我们的程序语言进化是从"面向机器".到"面向过程".再到"面向对象"一步步的发展而来.类似于汇编语言这样的面向机器的语言,随着时代的发展已经逐渐淘汰:而面向过程的语言也只有C语言老大哥依然坚挺:现在主流的语言(例如Java.C++.PHP等)都是面向对象的语言. 而我们的JavaScript语言,恰恰介于面向过程与面向对象之间,我们称它为"基于对象"的语言.但是,JS中的OOP依

JS中,子类调用超类函数

概述 JS虽然并不直接具备面向对象的特性,但仍可以通过prototype来模拟面向对象的继承和多态等特性.和大多数面向对象语言(例如C++,Java等)相比,JS来实现面向对象仍稍显繁琐和抽象,需要对JS的prototype模型有深入的理解. 在开发过程中,有时候会遇到这样一个问题:如果在子类中"覆盖"了超类的某个方法,但仍需要在子类方法中调用一次超类方法,这时候应该怎么做?如果是Java,一个简单的super关键字即可解决问题,但如果是JS呢? 解决问题的最基本方法可以是:在子类中,

js中OOP小指南

js中OOP小指南 在指南中,我将尝试解析以面向对象规范聚焦的es6的新特性. 首先, 什么是设计模式 范例是某个事务的例子或模型,在某种情况下,按照一种模式创建了计算机程序. 什么是面向对象 显然你意识到这是一种设计模式,像已经存在的这个模式,我们还有许多其它的设计模式,比如函数式编程和反应式编程. 这种模式的特点 我们在这个模式中所做的是以更接近实际的方式编程,我们使用类,对象,方法,属性等进行编程,并且集成了抽象,封装,模块化,隐私,多态和继承等术语. javascript的问题是,它不是

漫谈JS中的prototype

1. 引言 ??继承(inheritance).封装(encapsulation)和多态(polymorphism)是面向对象机制的主要特性.在JS中没有"class"的概念,自然也无法直接进行JAVA.C++常用到的extends.implements等操作.但从某种意义上来说,JS是纯粹的"面向对象"编程语言,因为JS中处处皆是对象(函数也是对象),而且作为函数式脚本语言,天生就是多态的.??网上很多文章探讨JS中如何设计class和面向对象机制,这些文章的思路

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

JS中的运算符&JS中的分支结构

一.JS中的运算符 1.算术运算(单目运算符) + 加.- 减.* 乘./ 除.% 取余.++ 自增.-- 自减 >>> +:有两种作用,连接字符串/加法运算.当+两边全为数字时,进行加法运算: 当+两边有任意一边为字符串时,起连接字符串的作用,连接之后的结果为字符串 除+外,其余符号运算时,会先尝试将左右变量用Number函数转为数字 >>> /: 结果会保留小数点 >>> ++: 自增运算符,将变量在原有基础上+1: --: 自减运算符,将变量在原

Js中的数据属性和访问器属性

Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性包含四个特性,分别是: configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true enumerable:表示能否通过for-in循环返回属性 writable:表示能否修改属性的值 value:包含该属性的数据值.默