javascript动态原型方法的多继承实现
来源:互联网 发布:阿里云部署html 编辑:程序博客网 时间:2024/06/05 10:38
<script type="text/javascript">
function MultiExtend(subClass,superClass){
//含有三个以上参数,表明要继承的具体方法
if(arguments[2]){
for(var i=2,len=arguments.length;i<len;i++){
subClass.prototype[arguments[i]] = superClass.prototype[arguments[i]];
}
}else{
for(methodName in superClass.prototype){
if(!subClass.prototype[methodName]){
subClass.prototype[methodName] = superClass.prototype[methodName];
}
}
}
}
function SuperA(){
if (typeof SuperA._initialized == "undefined") {
SuperA.prototype.HelloA = function(){
alert('HelloA');
}
SuperA._initialized = true;
}
}
function SuperB(){
if (typeof SuperB._initialized == "undefined") {
SuperB.prototype.HelloB = function(){
alert('HelloB');
}
SuperB._initialized = true;
}
}
function SuperC(){
if (typeof SuperC._initialized == "undefined") {
//这样如果没初始化过父类就初始化一次
if (typeof SuperA._initialized == "undefined") SuperA.call(this);
if (typeof SuperB._initialized == "undefined") SuperB.call(this);
//可以实现多继承
MultiExtend(SuperC,SuperA);
MultiExtend(SuperC,SuperB);
SuperC.prototype.HelloC = function(){
alert('HelloC');
}
SuperC._initialized = true;
}
}
var sc = new SuperC();
sc.HelloA();
sc.HelloB();
sc.HelloC();
function MultiExtend(subClass,superClass){
//含有三个以上参数,表明要继承的具体方法
if(arguments[2]){
for(var i=2,len=arguments.length;i<len;i++){
subClass.prototype[arguments[i]] = superClass.prototype[arguments[i]];
}
}else{
for(methodName in superClass.prototype){
if(!subClass.prototype[methodName]){
subClass.prototype[methodName] = superClass.prototype[methodName];
}
}
}
}
function SuperA(){
if (typeof SuperA._initialized == "undefined") {
SuperA.prototype.HelloA = function(){
alert('HelloA');
}
SuperA._initialized = true;
}
}
function SuperB(){
if (typeof SuperB._initialized == "undefined") {
SuperB.prototype.HelloB = function(){
alert('HelloB');
}
SuperB._initialized = true;
}
}
function SuperC(){
if (typeof SuperC._initialized == "undefined") {
//这样如果没初始化过父类就初始化一次
if (typeof SuperA._initialized == "undefined") SuperA.call(this);
if (typeof SuperB._initialized == "undefined") SuperB.call(this);
//可以实现多继承
MultiExtend(SuperC,SuperA);
MultiExtend(SuperC,SuperB);
SuperC.prototype.HelloC = function(){
alert('HelloC');
}
SuperC._initialized = true;
}
}
var sc = new SuperC();
sc.HelloA();
sc.HelloB();
sc.HelloC();
</script>
一、使用动态原型方法创建类的好处:
1.利用prototype创建方法,可以确保方法只实现一次,减少内存占用
2.可以使用在类内部定义的私有变量,如果使用原型模式创建则只能将私有变量公开
二、使用MultiExtend方法可以实现对多个类的继承,主要用于实现类似c#语言一样实现多个接口继承
- javascript动态原型方法的多继承实现
- JavaScript 原型对象的继承方法
- JavaScript的原型继承
- JavaScript的原型继承
- javascript实现继承的方法
- JavaScript实现继承的方法
- Javascript实现继承的方法
- javascript 基于原型的知识--如何实现继承
- javascript原型链简单示例(实现简单的继承)
- JavaScript使用原型实现继承时应注意的问题
- javascript基于原型的继承
- JavaScript原型继承的陷阱
- Javascript的原型继承思想
- JavaScript的继承--原型链
- 关于javascript的原型继承
- JavaScript的原型与继承
- JavaScript 利用prototype原型实现封装继承多态
- 如何利用javascript中的原型实现继承
- leetcode Wildcard Matching greedy algrithm
- 1000以内的偶数和.2
- Hadoop 使用问题整理
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- linux安装mysql.
- javascript动态原型方法的多继承实现
- 第10周-项目1-1
- 求1000以内所有偶数的和
- Hack4-自定义PreferenceActivity界面
- 20步打造最安全的Nginx Web服务器(Linux)
- linux中,qt creator打开文件时的中文乱码问题
- 计算1000以内的偶数的和第一种循环语句
- hdu 4712
- Needleman-Wunsch Algorithm