温故而知新--ECMAScript and javascript基础二
2008-01-22 15:15
591 查看
ECMA多重继承支持:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassX()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.messageX="This is the X message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassX._initialized=="undefined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassX.prototype.sayMessageX=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert(this.messageX);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassX._initialized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassY()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.messageY="This is the Y message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassY._initialized=="underfined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassY.prototype.sayMessageY=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert (this.messageY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassY._ini8tiaized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
ClassX和ClassY类都是小类,都只有一个属性和一个方法。假设现有ClassZ类,需要继承者两个类。如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassZ()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassX.apply(this);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassY.apply(this);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.message="This is thie Z message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassZ._initialized=="undefined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ.prototype.inheritFrom(ClassX);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ.prototype.inheritFrom(ClassY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassZ.prototype.sayMessageZ=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert(this.messageZ);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ._initialized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
注意继承属性的两行代码(使用apply()方法)和继承方法的两行代码(使用inheritFrom()方法)。继承的顺序非常重要。测试代码如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var objZ=new ClassZ();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageX(); //outputs "This is X message."
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageY(); //outputs "This is Y message."
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageZ(); //outputs "This is Z message."
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassX()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.messageX="This is the X message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassX._initialized=="undefined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassX.prototype.sayMessageX=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert(this.messageX);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassX._initialized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassY()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.messageY="This is the Y message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassY._initialized=="underfined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassY.prototype.sayMessageY=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert (this.messageY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassY._ini8tiaized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
ClassX和ClassY类都是小类,都只有一个属性和一个方法。假设现有ClassZ类,需要继承者两个类。如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
function ClassZ()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassX.apply(this);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassY.apply(this);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
this.message="This is thie Z message.";
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
if(typeof ClassZ._initialized=="undefined")...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ.prototype.inheritFrom(ClassX);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ.prototype.inheritFrom(ClassY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
ClassZ.prototype.sayMessageZ=function()...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
alert(this.messageZ);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
};
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ClassZ._initialized=true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
注意继承属性的两行代码(使用apply()方法)和继承方法的两行代码(使用inheritFrom()方法)。继承的顺序非常重要。测试代码如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var objZ=new ClassZ();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageX(); //outputs "This is X message."
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageY(); //outputs "This is Y message."
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
objZ.sayMessageZ(); //outputs "This is Z message."
相关文章推荐
- 温故而知新--ECMAScript and javascript基础一
- Javascript 高级程序设计 笔记 (一)ECMAscript基础部分,缓慢更新中
- JavaScript基础——ECMAScript的基础概念
- javascript 基础教程[温故而知新一]
- JavaScript学习笔记二ECMAScript基础
- javascript快速入门7--ECMAScript语法基础
- javascript 基础教程[温故而知新一]
- 【JS】JavaScript高级程序设计笔记 第2章 ECMAScript基础
- JavaScript(02): ECMAScript基础
- JAVASCRIPT基础学习篇(3)--ECMAScript Basic:constructor属性
- 前端基础之JavaScript_(1)_ECMAScript
- Web基础之认识JavaScript(LiveScript)、JScript和ECMAScript
- JavaScript程序设计——第2章 ECMAScript基础
- JavaScript 基础(4)ECMAScript(基础语法)——内置对象Array、String、Math、Date
- 笔记——JavaScript 高级程序设计(1)——ECMAScript基础
- JAVASCRIPT学习笔记--ECMAScript基础(1)
- (读书笔记)Javascript高级程序设计---ECMAScript基础
- Building JavaScript Games for Phones Tablets and Desktop(2)-游戏编程基础
- JAVASCRIPT基础学习篇(5)--ECMAScript Basic1(EcmaScript 基本类型)
- JAVASCRIPT基础学习篇(11)--ECMAScript Basic7(The Browser Object Model)