文档章节

js 中的继承

熊大熊二
 熊大熊二
发布于 2015/09/23 20:21
字数 694
阅读 133
收藏 18

面试的时候总是被问到js的继承,平时都是应用,最近有时间就把js 的继承整理了一下,和java 中的继承做了一下比较,代码如下:

js继承有5种实现方式:

1、对象冒充
<script>
 
function Parent(username){ 
    this.username = username; 
    this.hello = function(){ 
      alert(this.username); 
    } 
  } 
  function Child(username,password){ 
    //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承 
    //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象, 
    //第二步:执行this.method方法,即执行Parent所指向的对象函数 
    //第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法 
    this.method = Parent; 
    this.method(username);//最关键的一行 
    delete this.method; 

    this.password = password; 
    this.world = function(){ 
      alert(this.password); 
    } 
  } 
  var parent = new Parent("zhangsan"); 
  var child = new Child("lisi","123456"); 
  parent.hello(); 
  child.hello(); 
  child.world(); 
</script>

 

2、继承第二种方式:call()方法方式
<script>
  /*
  call方法是Function类中的方法 
  call方法的第一个参数的值赋值给类(即方法)中出现的this 
  call方法的第二个参数开始依次赋值给类(即方法)所接受的参数
  */

  function test(str){ 
    alert(this.name + " " + str); 
  } 
  var object = new Object(); 
  object.name = "zhangsan"; 
  test.call(object,"langsin");//此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str 

  function Parent(username){ 
    this.username = username; 
    this.hello = function(){ 
      alert(this.username); 
    } 
  } 
  function Child(username,password){ 
    Parent.call(this,username); 
    
    this.password = password; 
    this.world = function(){ 
      alert(this.password); 
    } 
  } 
  var parent = new Parent("zhangsan"); 
  var child = new Child("lisi","123456"); 
  parent.hello(); 
  child.hello(); 
  child.world(); 
</script>

 

3、继承的第三种方式:apply()方法方式
<script>
  /*apply方法接受2个参数, 
    A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this 
    B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数 
  */
  function Parent(username){ 
    this.username = username; 
    this.hello = function(){ 
      alert(this.username); 
    } 
  } 
  function Child(username,password){ 
    Parent.apply(this,new Array(username)); 
    
    this.password = password; 
    this.world = function(){ 
      alert(this.password); 
    } 
  } 
  var parent = new Parent("zhangsan"); 
  var child = new Child("lisi","123456"); 
  parent.hello(); 
  child.hello(); 
  child.world(); 
  </script>
4、原型方式继承
<script type="text/javascript">  
    function Person(name,age){  
        this.name=name;  
        this.age=age;  
    }  
    Person.prototype.sayHello=function(){  
        alert("使用原型得到Name:"+this.name);  
    }  
    var per=new Person("zhangsan",21);  
    per.sayHello(); //输出:使用原型得到Name:zhangsan  

      
    function Student(){}  
    Student.prototype=new Person("lisi",21);  
    var stu=new Student();  
    Student.prototype.grade=5;  
    Student.prototype.intr=function(){  
        alert(this.grade);  
    }  
    stu.sayHello();//输出:使用原型得到Name:lisi  
    stu.intr();//输出:5  
</script>

  5、继承的第五种方式:混合方式 
  混合了call方式、原型链方式

 function Parent(hello){ 
    this.hello = hello; 
  } 
  Parent.prototype.sayHello = function(){ 
    alert(this.hello); 
  } 

  function Child(hello,world){ 
    Parent.call(this,hello);//将父类的属性继承过来 
    this.world = world;//新增一些属性 
  } 

  Child.prototype = new Parent();//将父类的方法继承过来 

  Child.prototype.sayWorld = function(){//新增一些方法 
    alert(this.world); 
  } 

  var c = new Child("zhangsan","lisi"); 
  c.sayHello(); 
  c.sayWorld();

  今天到此为止吧

© 著作权归作者所有

熊大熊二
粉丝 16
博文 31
码字总数 29359
作品 0
东城
程序员
私信 提问
JavaScript instanceof 运算符深入剖析

随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验。而前端开发的主要语言则是 JavaScript。学好 JavaScript 对开发前端应用已经越来越重要。在开发复杂产品中,需要使用...

IBMdW
2013/06/14
371
1
JavaScript 中的继承:ES3、ES5 和 ES6

选择一种继承方式 JavaScript 是一门动态语言,动态意味着高灵活性,而这尤其可以体现在继承上面。JavaScript 中的继承有很多种实现方式,可以分成下面四类: Mixin 模式,即属性混入,从一个...

天方夜
2018/10/30
0
0
Cocos2d-JS中JavaScript继承

JavaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求。由于Cocos2d-JS引擎是从Cocos2d-x演变而来的,在Cocos2d-J...

智捷课堂
2015/03/17
43
0
javascript原型的理解

JavaScript是一门面向对象的语言。在JavaScript中有一句很经典的话,万物皆对象。既然是面向对象的,那就有面向对象的三大特征:封装、继承、多态。这里讲的是JavaScript的继承,其他两个容后...

痴情小云
2018/06/26
0
0
用通俗易懂的语言介绍JavaScript原型

原型(prototype)是每个JavaScript开发人员必须理解的基本概念,本文的目标是通俗而又详细地解释JavaScript的原型。如果你读完这篇博文以后还是不理解JavaScript的原型,请将你的问题写在下...

gsbhzh
2014/10/29
190
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部