浅析JS原型继承与类的继承


Posted in Javascript onApril 07, 2016

我们先看JS类的继承

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
    <title>JS类的继承</title>
</head>

<body>
  /* -- 类式继承 -- */
  <script type="text/javascript">
  //先声明一个超类
  var Animal = function(name) {
      this.name = name;
    }
    //给这个超类的原型对象上添加方法
  Animal.prototype.Eat = function() {
    console.log(this.name + " Eat");
  };
  //实例化这个超
  var a = new Animal("Animal");

  //再创建构造函数对象类
  var Cat = function(name, sex) {
      //这个类中要调用超类Animal的构造函数,并将参数name传给它
      Animal.call(this, name);
      this.sex = sex;
    }
    //这个子类的原型对象等于超类的实例
  Cat.prototype = new Animal();
  //因为子类的原型对象等于超类的实例,所以prototype.constructor这个方法也等于超类构造函数

  console.log(Cat.prototype.constructor);
  //这个是Animal超类的引用,所以要从新赋值为自己本身
  Cat.prototype.constructor = Cat;
  console.log(Cat.prototype.constructor);
  //子类本身添加了getSex 方法
  Cat.prototype.getSex = function() {
      return this.sex;
    }
    //实例化这个子类
  var _m = new Cat('cat', 'male');
  //自身的方法
  console.log(_m.getSex()); //male
  //继承超类的方法
  console.log(_m.Eat()); //cat
  </script>
</body>

</html>

 我们再看JS原型继承

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>JS原型继承</title>
</head>

<body>
  <!--原型继承-->
  <script type="text/javascript">
  //clone()函数用来创建新的类Person对象
  var clone = function(obj) {
    var _f = function() {};
    //这句是原型式继承最核心的地方,函数的原型对象为对象字面量
    _f.prototype = obj;
    return new _f;
  }

  //先声明一个对象字面量
  var Animal = {
      somthing: 'apple',
      eat: function() {
        console.log("eat " + this.somthing);
      }
    }
    //不需要定义一个Person的子类,只要执行一次克隆即可
  var Cat = clone(Animal);
  //可以直接获得Person提供的默认值,也可以添加或者修改属性和方法
  console.log(Cat.eat());
  Cat.somthing = 'orange';
  console.log(Cat.eat());

  //声明子类,执行一次克隆即可
  var Someone = clone(Cat);
  </script>
</body>

</html>

我们可以试验一下,JS类的继承 children.constructor==father 返回的是true,而原型继承children.constructor==father 返回的是false;

以上这篇浅析JS原型继承与类的继承就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS无法捕获滚动条上的mouse up事件的原因猜想
Mar 21 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
jquery的ajax简单结构示例代码
Feb 17 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
jquery禁用右键单击功能屏蔽F5刷新
Mar 17 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
JQuery Mobile实现导航栏和页脚
Mar 09 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
Dec 30 Javascript
jsonp跨域请求详解
Jul 13 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 Javascript
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
AngularJs 弹出模态框(model)
Apr 07 #Javascript
详解AngularJS 模态对话框
Apr 07 #Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 #Javascript
jQuery动态添加
Apr 07 #Javascript
javascript模块化简单解析
Apr 07 #Javascript
jquery编写Tab选项卡滚动导航切换特效
Jul 17 #Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
Apr 07 #Javascript
You might like
php写入数据到CSV文件的方法
2015/03/14 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
python中文编码问题小结
2014/09/28 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python输出各行命令详解
2018/02/01 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
如何用python 操作zookeeper
2020/12/28 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
高效课堂标语
2014/06/26 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
SQL中的三种去重方法小结
2021/11/01 SQL Server
TS 类型收窄教程示例详解
2022/09/23 Javascript