今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声“抱歉”!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一般是从这点上看出来的。

占占对类的定义:

类是对现实中的事物的抽象,一个类一般由属性和方法构成,属性是一些固定的信息,而方法是类的某种行为,类往往用来抽象一些复杂的对象,类与类这间可以进行继承,一般通过JS的function实现,JS中的类对象是实现JS面向对象的基础。

占占对结构体的定义:

一个结构体也是对现实事物的一种抽象,它用来表示逻辑简单的对象,一般通过JS的object对象实现

实现结构体的代码:

      //简单结构体对象var Animal = {Name: "动物",Type: "",Food: ["草", "肉"],Print: function () {console.log("名称:" + this.Name + ",类型:" + this.Type + ",食物:" + this.Food);}};Animal.Print();//调用

实现复杂的类的代码:

     //复杂的类型对象var AnimalFun = function (name, type) {this.Name = name;this.Type = type;this.Food = ["草", "肉"];this.Print = function () {console.log("名称:" + this.Name + ",类型:" + this.Type + ",食物:" + this.Food);}};var animalFun = new AnimalFun();animalFun.Print();

子类去继承父类,但复写父类的属性,调用父类的方法,代码如下:

     //子类可以继承父类,并可以复写它的属性var Dog = function (name, type, food) {//调用父类构造方法,并传递name参数  AnimalFun.call(this, name, type);//复写属性  this.Food = food;}//将Dog的原型链指向AnimalFun对象  Dog.prototype = new AnimalFun();//重置constructor属性为Student类,由于设置了Student类的prototype为Person时  //擦除了constructor属性  Dog.prototype.constructor = Dog;//实例化Dog类  var s = new Dog('狗', '低级动物', '肉');//调用父类的方法  s.Print(); //结果:名称:狗,类型:低级动物,食物:肉

小知识:JS实现类的继承的机制是这样的:

在子类构造函数(constructor)中调用父类构造函数(父类.call()).

修改子类prototype(原型链)属性为父类的实例.(prototype一般用来实现对函数的扩展,Dog.prototype = new AnimalFun();表示对父类AnimalFun进行扩展)

重置子类的prototype的constructor属性为子类.

感谢您的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:Javascript基础与面向对象基础~第四讲 Javascript中的类对象,如需转载请自行联系原博主。

Javascript基础与面向对象基础~第四讲 Javascript中的类对象相关推荐

  1. AcWing基础算法课Level-2 第四讲 数学知识

    AcWing基础算法课Level-2 第四讲 数学知识 您将学会以下数学名词 质数,试除法,埃式筛法,线性筛,辗转相除,算术基本定理,质因数分解,欧拉函数,快速幂,费马小定理,逆元,拓展欧几里得,一次 ...

  2. 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件

    本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求过程中,所 ...

  3. java中过滤流_第十四讲 Java中的字节流和过滤流

    第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...

  4. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

  5. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  6. python面向对象基础_python面向对象基础

    面向对象基础 一.面向对象和面向过程 面向过程: 优点:复杂问题流程化,进而简单化 确定:可扩展性差 面向对象: 优点:可扩展性高 缺点:编写复杂度高于面向过程 二.类与对象 类即类别.种类,是面向对 ...

  7. 【Python基础】面向对象基础和特性

    Python面向对象 面向对象基础 定义类 创建对象 添加和获取对象属性 魔法方法 对象的生命周期 私有属性和私有方法 面向对象特性 封装 封装案例演练 继承 继承的传递性 方法的重写 父类的私有属性 ...

  8. Javascript基础与面向对象基础~第六讲 Javascript中的事件机制

    回到目录 事件机制,在JS中感觉很容易让人接受,一个鼠标被按下时会发生一些事情,一个键盘的键被抬起时同样可以发生一些事情,这种比喻很容易让人接受,不是吗,呵呵. 下面我将JS中几个主要的事件说一下,然 ...

  9. 【基础篇】Kotlin第四讲-类、对象和接口

    类 类是逻辑组织的基本单元,类含有以下成分:依赖包,类名,构造方法,属性,成员方法,伴生对象,接口,父类等 类的构造方法的完整逻辑过程 先考虑主构造函数,当主构造函数不够用时,再引入从构造函数.最初的 ...

最新文章

  1. 未转变者空投指令服务器,未转变者空投指令 | 手游网游页游攻略大全
  2. 【UVA11324】The Largest Clique (SCC)
  3. B14_NumPy算术函数( add(),subtract(),multiply() 和 divide()、reciprocal()、power()、mod())
  4. 火线妹在线求偶,想找高质量男朋,粉丝:有没有绯闻心里没数?
  5. 小程序卡片叠层切换卡片_现在,卡片和清单在哪里?
  6. 【ArcGIS Pro风暴】Data Interoperability Tools快速将CASS等高线dwg转为shp案例教程
  7. P4590-[TJOI2018]游园会【dp套dp】
  8. MySQL数据库存入日期(java.sql.Date)数据,天数会少一天的问题
  9. Verizon部署美国最大小型基站系统
  10. Matlab x2fx函数
  11. Delphi 精选文章地址
  12. 牛客小白月赛31——补题记
  13. Python设置显示屏分辨率
  14. 你还不知道高情商表现怎么表现?
  15. C语言16进制乘法怎么算,16进制数之间的加法怎么算
  16. 2019年 8月7日 日报
  17. android 微博开发者平台,微博Android平台SDK文档V.pdf
  18. 逆向教程-U3D游戏逆向分析(伊甸逆向分析)
  19. 算术左移,逻辑左移,算术右移,逻辑右移之间的区别
  20. WEB 请求处理二:Nginx 请求 反向代理

热门文章

  1. 【文本分类】Recurrent Convolutional Neural Networks for Text Classification
  2. GNT格式转换为PNG格式
  3. ubuntu报错解决:The following packages have unmet dependencies:
  4. 电机测试matlab,基于MATLAB的电机故障诊断模型训练与测试平台
  5. android 半透明pop,Android实现AppCompatActivity全屏半透明
  6. Specification使用in
  7. matlab动力学方程,机器人动力学方程(二):拉格朗日法
  8. 韶关2020年计算机专业录取分,韶关学院2020年广东各批次录取分数线
  9. 复习下mybatis 中 useGeneratedKeys 和 keyProperty 含义
  10. iOS多线程中performSelector: 和dispatch_time的不同