无为清净楼资源网 Design By www.qnjia.com
1.原型链
//很少单独使用
复制代码 代码如下:
View Code
//定义 SuperClass类,有一个属性property和一个方法getSuperValue
function SuperClass() {
this.property = true;
}
SuperClass.prototype.getSuperValue = function() {
return this.property;
}
//定义SubClass类,有一个属性subproperty和后来添加的一个方法getSubValue
function SubClass() {
this.subproperty = false;
}
//SubClass类继承SuperClass类
SubClass.prototype = new SuperClass();
//SubClass类添加一个方法getSubValue
SubClass.prototype.getSubValue = function() {
return this.subproperty;
}
//创建SubClass类的实例
var instance = new SubClass();
alert(instance.getSuperValue());
2. 确定原型与实例的关系
第一种方式用 instanceof 操作符,用来测试实例和原型链中出现过的构造函数
复制代码 代码如下:
alert(instance instanceof Object); //true ,instance是Object的实例吗?
alert(instance instanceof SuperClass); //true ,instance是SuperClass的实例吗?
alert(instance instanceof SubClass); //true,instance是SubClass的实例吗?
第二种方式用 isPrototypeOf()方法,测试原型链中出现的原型
复制代码 代码如下:
alert(Object.prototype.isPrototypeOf(instance)); //true
alert(SuperClass.prototype.isPrototypeOf(instance)); //true
alert(SubClass.prototype.isPrototypeOf(instance)); //true
3. 用原型链继承定义方法时的注意点
定义方法是的顺序:
复制代码 代码如下:
View Code
function SuperClass() {
this.property = true;
}
SuperClass.prototype.getSuperValue = function() {
return this.property;
}
function SubClass() {
this.subproperty = false;
}
//SubClass继承SuperClass
SubClass.prototype = new SuperClass(); //这个要先写,新添加的方法和重写超类的方法要写在后面,否则重写的超类方法将永远无法调用
//添加新方法
SubClass.prototype.getSubValue = function() {
return this.subproperty;
}
//重写超类的方法
SubClass.prototype.getSuperValue = function() {
return false;
}
var instance = new SubClass();
alert(instance.getSuperValue()); //fales,这里SubClass的实例调用了SubClass的getSuperValue()方法,而屏蔽了SuperClass的getSuperValue()方法,
//使用SuperClass的方法会调用SuperClass的getSuperValue()方法
原型链继承的缺点:1)共享超类中的属性,2)在创建子类时不能向超类的构造函数传递参数。所有很少单独使用原型链
4.借用构造函数
//很少单独使用
优点:可以向超类传递参数 。缺点:函数无法复用,所有类都要使用构造函数模式
复制代码 代码如下:
View Code
function SuperClass(name) {
this.name = name;
}
function SubClass(){
SuperClass.call(this,"RuiLiang"); //继承了SuperClass,同时向SuperClass传递了参数
this.age = 29; //实例属性
}
var instance = new SubClass();
alert(instance.name); //RuiLiang
alert(instance.age); //29
6.组合继承
//最常用的继承模式
复制代码 代码如下:
View Code
//创建SuperClass
function SuperClass(name) {
this.name = name;
this.colors = ["red","blue","green"];
}
SuperClass.prototype.sayName = function() {
alert(this.name);
}
////创建SubClass
function SubClass(name,age) {
SuperClass.call(this,name); //继承属性
this.age = age; //自己的属性
}
SubClass.prototype = new SuperClass(); //继承方法
SubClass.prototype.sayAge = function() { //SubClass添加新方法
alert(this.age);
};
//使用
var instance1 = new SubClass("RuiLiang",30);
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
instance1.sayName(); //"RuiLiang"
instance1.sayAge(); //30
var instance2 = new SubClass("XuZuNan",26);
alert(instance2.colors); //"red,blue,green"
instance2.sayName(); //"RuiLiang"
instance2.sayAge(); //30
7.其它继承模式
原型式继承、寄生式继承、寄生组合式继承
//很少单独使用
复制代码 代码如下:
View Code
//定义 SuperClass类,有一个属性property和一个方法getSuperValue
function SuperClass() {
this.property = true;
}
SuperClass.prototype.getSuperValue = function() {
return this.property;
}
//定义SubClass类,有一个属性subproperty和后来添加的一个方法getSubValue
function SubClass() {
this.subproperty = false;
}
//SubClass类继承SuperClass类
SubClass.prototype = new SuperClass();
//SubClass类添加一个方法getSubValue
SubClass.prototype.getSubValue = function() {
return this.subproperty;
}
//创建SubClass类的实例
var instance = new SubClass();
alert(instance.getSuperValue());
2. 确定原型与实例的关系
第一种方式用 instanceof 操作符,用来测试实例和原型链中出现过的构造函数
复制代码 代码如下:
alert(instance instanceof Object); //true ,instance是Object的实例吗?
alert(instance instanceof SuperClass); //true ,instance是SuperClass的实例吗?
alert(instance instanceof SubClass); //true,instance是SubClass的实例吗?
第二种方式用 isPrototypeOf()方法,测试原型链中出现的原型
复制代码 代码如下:
alert(Object.prototype.isPrototypeOf(instance)); //true
alert(SuperClass.prototype.isPrototypeOf(instance)); //true
alert(SubClass.prototype.isPrototypeOf(instance)); //true
3. 用原型链继承定义方法时的注意点
定义方法是的顺序:
复制代码 代码如下:
View Code
function SuperClass() {
this.property = true;
}
SuperClass.prototype.getSuperValue = function() {
return this.property;
}
function SubClass() {
this.subproperty = false;
}
//SubClass继承SuperClass
SubClass.prototype = new SuperClass(); //这个要先写,新添加的方法和重写超类的方法要写在后面,否则重写的超类方法将永远无法调用
//添加新方法
SubClass.prototype.getSubValue = function() {
return this.subproperty;
}
//重写超类的方法
SubClass.prototype.getSuperValue = function() {
return false;
}
var instance = new SubClass();
alert(instance.getSuperValue()); //fales,这里SubClass的实例调用了SubClass的getSuperValue()方法,而屏蔽了SuperClass的getSuperValue()方法,
//使用SuperClass的方法会调用SuperClass的getSuperValue()方法
原型链继承的缺点:1)共享超类中的属性,2)在创建子类时不能向超类的构造函数传递参数。所有很少单独使用原型链
4.借用构造函数
//很少单独使用
优点:可以向超类传递参数 。缺点:函数无法复用,所有类都要使用构造函数模式
复制代码 代码如下:
View Code
function SuperClass(name) {
this.name = name;
}
function SubClass(){
SuperClass.call(this,"RuiLiang"); //继承了SuperClass,同时向SuperClass传递了参数
this.age = 29; //实例属性
}
var instance = new SubClass();
alert(instance.name); //RuiLiang
alert(instance.age); //29
6.组合继承
//最常用的继承模式
复制代码 代码如下:
View Code
//创建SuperClass
function SuperClass(name) {
this.name = name;
this.colors = ["red","blue","green"];
}
SuperClass.prototype.sayName = function() {
alert(this.name);
}
////创建SubClass
function SubClass(name,age) {
SuperClass.call(this,name); //继承属性
this.age = age; //自己的属性
}
SubClass.prototype = new SuperClass(); //继承方法
SubClass.prototype.sayAge = function() { //SubClass添加新方法
alert(this.age);
};
//使用
var instance1 = new SubClass("RuiLiang",30);
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
instance1.sayName(); //"RuiLiang"
instance1.sayAge(); //30
var instance2 = new SubClass("XuZuNan",26);
alert(instance2.colors); //"red,blue,green"
instance2.sayName(); //"RuiLiang"
instance2.sayAge(); //30
7.其它继承模式
原型式继承、寄生式继承、寄生组合式继承
标签:
js对象,继承
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月17日
2024年11月17日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】