浅析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 相关文章推荐
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
JavaScript中错误正确处理方式小结你用对了吗
Oct 10 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
vue和webpack安装命令详解
Jun 15 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 Javascript
Vue自定义全局弹窗组件操作
Aug 11 Javascript
Vue全局事件总线你了解吗
Feb 24 Vue.js
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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
javascript 写类方式之十
2009/07/05 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python的debug实用工具 pdb详解
2019/07/12 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
前台文员岗位职责
2013/12/28 职场文书
父母对孩子的寄语
2014/04/09 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书