JS继承
JavaScript中没有类的概念,与类相关的继承的概念更是无从谈起,但是我们可以通过特殊的语法来
模拟面向对象语言中的继承。
在JS中模拟继承有多种方式,其中寄生组合模式是一种比较容易简单的模拟继承模式,下面我们就来
介绍一下用寄生组合模式模拟继承。
JS的继承包括属性的继承和方法的继承,他们分别通过不同的方法来实现。
1属性的继承
属性的继承通过改变函数的执行环境来实现的。而改变函数的执行环境可以使用call()和apply()两种
方法来实现。
我们首先创建一个Animal“类”(因为JS中没有类的概念,这里只是一个模拟,它实际上只是一个
Function函数对象)。
复制代码 代码如下:
function Animal(name){
this.name=name;
}
再创建一个Lion“类”,“继承”于Animal
复制代码 代码如下:
function Lion(){
Animal.apply(this, ["狮子"]);
}
这里使用了Animal的apply方法,把Animal的执行环境改成Lion被调用时的执行环境。
这里要解释一下,我们要想使用Lion这个“类”,通常需要new一个Lion。如:
var l = new Lion();
而new关键字是十分伟大的,在上段代码中,new关键字完成了以下几项工作:
1)开辟堆空间,以准备存储Lion对象
2)修改Lion对象本身的执行环境,使得Lion函数的this指向了Lion函数对象本身。
3)调用Lion“类”的“构造函数”,创建Lion对象
4)将Lion函数对象的堆地址赋值给变量l,这个时候l就指向了这个Lion函数对象
所以经过new关键字以后Animal.apply(this, ["狮子"])中的this已经指向了Lion函数对象本身了,所
以这段代码就将Animal函数的执行环境改变成了Lion函数中,相当于以下代码:
复制代码 代码如下:
function Lion(){
function Animal(name){
this.name=name;
}
}
而此时的this已经是Lion函数对象了所以上段代码进一步相当于:
复制代码 代码如下:
function Lion(){
this.name=name;
}
这样就给Lion函数对象添加了name属性,也模拟了Lion函数继承于Animal函数的效果。
2方法的继承
在JS中每一个“类”(即函数,注意不是函数对象)都有一个prototype属性,prototype表示该函数
的原型,也表示一个类的成员的集合(通常是方法的集合)。我们可以通过函数的prototype属性来实现方
法的继承。
我们同样首先创建一个Animal“类”:
复制代码 代码如下:
function Animal(name){
this.name=name;
}
给Animal的原型中加入一个eat方法:
复制代码 代码如下:
Animal.prototype.eat=function(){
alter("我能吃!~");
}
创建一个Lion“类”,同时完成对Animal“类”的属性的继承
复制代码 代码如下:
function Lion(){
Animal.apply(this, ["狮子"]);
}
注意下面的代码,我们马上要完成方法的继承了
Lion.prototype=new Animal();
这样就把一个Animal函数对象储存在了Lion的原型中了,Lion也就包含了Animal中的方法了(其实也
包含了属性)。这样就模拟了Lion函数对Animal的继承。
JavaScript中没有类的概念,与类相关的继承的概念更是无从谈起,但是我们可以通过特殊的语法来
模拟面向对象语言中的继承。
在JS中模拟继承有多种方式,其中寄生组合模式是一种比较容易简单的模拟继承模式,下面我们就来
介绍一下用寄生组合模式模拟继承。
JS的继承包括属性的继承和方法的继承,他们分别通过不同的方法来实现。
1属性的继承
属性的继承通过改变函数的执行环境来实现的。而改变函数的执行环境可以使用call()和apply()两种
方法来实现。
我们首先创建一个Animal“类”(因为JS中没有类的概念,这里只是一个模拟,它实际上只是一个
Function函数对象)。
复制代码 代码如下:
function Animal(name){
this.name=name;
}
再创建一个Lion“类”,“继承”于Animal
复制代码 代码如下:
function Lion(){
Animal.apply(this, ["狮子"]);
}
这里使用了Animal的apply方法,把Animal的执行环境改成Lion被调用时的执行环境。
这里要解释一下,我们要想使用Lion这个“类”,通常需要new一个Lion。如:
var l = new Lion();
而new关键字是十分伟大的,在上段代码中,new关键字完成了以下几项工作:
1)开辟堆空间,以准备存储Lion对象
2)修改Lion对象本身的执行环境,使得Lion函数的this指向了Lion函数对象本身。
3)调用Lion“类”的“构造函数”,创建Lion对象
4)将Lion函数对象的堆地址赋值给变量l,这个时候l就指向了这个Lion函数对象
所以经过new关键字以后Animal.apply(this, ["狮子"])中的this已经指向了Lion函数对象本身了,所
以这段代码就将Animal函数的执行环境改变成了Lion函数中,相当于以下代码:
复制代码 代码如下:
function Lion(){
function Animal(name){
this.name=name;
}
}
而此时的this已经是Lion函数对象了所以上段代码进一步相当于:
复制代码 代码如下:
function Lion(){
this.name=name;
}
这样就给Lion函数对象添加了name属性,也模拟了Lion函数继承于Animal函数的效果。
2方法的继承
在JS中每一个“类”(即函数,注意不是函数对象)都有一个prototype属性,prototype表示该函数
的原型,也表示一个类的成员的集合(通常是方法的集合)。我们可以通过函数的prototype属性来实现方
法的继承。
我们同样首先创建一个Animal“类”:
复制代码 代码如下:
function Animal(name){
this.name=name;
}
给Animal的原型中加入一个eat方法:
复制代码 代码如下:
Animal.prototype.eat=function(){
alter("我能吃!~");
}
创建一个Lion“类”,同时完成对Animal“类”的属性的继承
复制代码 代码如下:
function Lion(){
Animal.apply(this, ["狮子"]);
}
注意下面的代码,我们马上要完成方法的继承了
Lion.prototype=new Animal();
这样就把一个Animal函数对象储存在了Lion的原型中了,Lion也就包含了Animal中的方法了(其实也
包含了属性)。这样就模拟了Lion函数对Animal的继承。
标签:
JS继承
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“JS继承 笔记”评论...
更新动态
2024年11月13日
2024年11月13日
- 手办鉴赏室:露比的日常约会装!神秘少女的经典制服
- 年轻人开始养黏菌当宠物了 2年内就超越了欧美和日本
- 在国际数字音乐节上 我听宫奇聊了聊星铁和游戏音乐
- 别着急入手!玩家热议PS5 Pro溢价持续不了多久
- 刘若英《老歌回忆录》原抓 [WAV+CUE][569M]
- 雷婷《今生最爱》原音1:1母版直刻CD 正版CD低速原抓[WAV+CUE][528M]
- BEYOND《金碟至尊精选》(24K碟)2020[WAV+CUE][1.1G]
- 【原神】冒险指南 | 全新敌人出现!
- 冒险指南 | 探寻神秘而传奇的「烟谜主」...
- 「百货奇货」活动:开奇货匣得原石
- 群星.2009-她的沧海遗珠精选(金碟铁盒珍藏系列)【SONY】【WAV+CUE】
- 王中平.1993-天知道我爱你【蓝与白】【WAV+CUE】
- 郭富城.2004-城意三步曲【华纳】【WAV+CUE】
- 那英《知英情歌》[原抓WAV+CUE]
- 龚玥《永远民歌红》11直刻母带级重生金CD[低速原抓WAV+CUE]