浅析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 相关文章推荐
Javascript查询DBpedia小应用实例学习
Mar 07 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
jQuery中:nth-child选择器用法实例
Dec 31 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
JavaScript门面模式详解
Oct 19 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
详解封装基础的angular4的request请求方法
Jun 05 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
微信小程序自定义底部弹出框动画
Nov 18 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 intval的测试代码发现问题
2008/07/27 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP count()函数讲解
2019/02/03 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
JavaScript引用类型Function实例详解
2018/08/09 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
urllib2自定义opener详解
2014/02/07 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python图像处理入门(一)
2019/04/04 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
传播学毕业生求职信
2013/10/11 职场文书
采购部部门职责
2013/12/15 职场文书
大课间活动实施方案
2014/03/06 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
民主评议党员工作总结
2014/10/20 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server