javascript是弱类型,直译式的面相对象编程语言。

在之前我们说过
var a = 123; 在这里a是整数 但是我们可以给a重新复制为 a="你好"; 在这个过程中变量a 的值发生了改变,对应的类型也不再是数值类型,我们称这种特性为弱类型。
直译式指的是不需要通过其他方式,浏览器可以直接编译解析的方式为直译式。
那么面相对象是什么呢oo?
简单来说 面相对象要拆分为两个不同的单词进行描述 面相-对象 面相是个很好理解的单词,就是对着,面对 我们可以说面向世界,面向未来 ,这里面主要的就是对象这个词语。
面向对象:对现实世界的理解与抽象,是计算机编程技术发展到一定阶段的产物。
ok 上诉描述有点抽象,我们来举个栗子
 
 

大家都知道计算机最终的目的是通过电脑来解决现实中的事物与功能。那我们现在要用计算机来描述一个航班信息。
大家思考下,我们首先需要个飞机,然后需要一些旅客。
 

 
那在这里面我们当然不能在电脑里装一个飞机或者一堆人(二次元可以试试)。那怎么办呢?
在这里我们通过一些描述信息 如 string字符串 或number数值来描述一个真实飞机。
 
 

 
那在这里,我们就通过使用js的内置数据类型来描述了一个飞机的特性,那么小伙伴会有个问题~ 这里哪有对象 哪有面相? ok我们继续向下来处理。
 
上面的代码我们只是描述了一个简单的飞机,如果我们有两架飞机怎么办呢?

 
我们可以通过定义额外的变量来进行描述,当然这种方式很不理想,因为我无法确定我定义的是一个飞机还是以个拖拉机或者三轮子。这个时候就需要我们面相对象来进行登场了
 
----------------------------------------- 我是前戏分割线 --------------------------------------------
 
面向对象:通过将现实世界中具有相同属性和行为的事物抽取为一个类,一个类的实例,我们称之为对象的实例。
 
类:具有相同属性和行为的事物的抽象体。
 
对象: 一个类的具体实现和显示的真实例子。
 
首先我们搞清楚类的概念,什么是类?
 
类的概念有点抽象和空虚,比如我们可以说 小明 和 小红 是 人,那么在这个过程中, 人就是类,小明和小红就是类的实体,也就是我们常说的对象。
 
类具有两个特殊的实现方式,我们称之为属性和方法。
属性 :一般用来描述我们看得见摸得着的抽象。如色彩、身高、体重、名字等
方法(行为) :方法一般指动态的操作行为。比如跑步、说话、上学、写作业、泡妹纸...
类的特点:类一般是抽象而成,也就是说本身不具有实际的行动意义,需要一个实际的例子来用来对他的内部进行操作。
对象:通过关键字new或其他方式创建,继承了类的属性和行为的真实例子进行操作。
我们的编程就是定义好一个类,然后通过对实例对象的操作进行工作,这种方式就是面向对象。
 
大家可以想象下我们在之前接触的对象概念 如 String、Number 他们都是类的概念定义,而一个new String('123')、new Number(123)就是这个类的实体,我们一直以来也只是对着实体操作,因为面向对象概念非常复杂,我们后期慢慢进行。
 
//ok 我们来进行第一件事情,创建一个类
 
//首先我们创建一个人的类
//来思考下 人有什么用的共性呢?

 
属性: 头 手 脚 眼睛 衣服...
行为: 吃饭 唱歌 跑步 运动
 
在javascript中,并没有对类的创建提供单独的方式,所以我们只能使用function函数来进行创建。
首先了解第一种方式:
工厂模式:
通过function定制一个创建对象的模板,在运行结束后返回一个定制好的对象,具有一定的属性和行为。
 
 
但是在这里面我们有一个问题,那就是无法告知别人当前对象是哪一种类。
 
构造模式:
构造模式通过使用函数+new关键字分别创建类和实例

 
在这里我们注意点,一般使用构造模式进行创建时,函数名称首字母一般大写(行业规范),
那么在使用new关键字时,这里面发生了几个变化
1.new+函数后会创建返回一个当前函数类型的对象
2.函数内部的this指向更改为指向当前的 new 函数,也就是新创建的对象本身
3.生成constructor 用于声明指向当前对象的构造函数
4.新创建的对象生成一个__proto__的属性 指向构造函数的prototype
 
原型构造模式:
如果将属性和行为都放在函数内部中进行创建,不利于位于,尤其是在业务比较复杂的情况下,所以又提供了原型模式。

  
动态原型模式
有些时候我们想要一个类继承另一个类的属性,那么这种时候我们就可以使用动态原型模式

 
在上述代码中通过创建Person类,boy类,Girl类。
在Boy和girl中 ,通过使用person替换this创建私有属性和方法(但是不会继承原型对象,原型对象只有在new关键字才会继承)。
 
组合模式
通过将原型模式和构造模式一起使用

 面向对象先简单介绍基础知识到这里 
 
 
 
 

javascript面向对象(一)的更多相关文章

  1. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  2. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  3. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  4. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  5. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  7. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  8. 《javascript面向对象精要》读书笔记

    <javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ...

  9. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...

  10. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. 认识 getAttribute() setAttribute()

    getAttribute()方法不属于document对象,所以不能通过document对象调用,它只能通过元素节点对象调用 var paras = document.getElementsByTag ...

  2. HDU 2520 我是菜鸟,我怕谁

    我是菜鸟,我怕谁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. HTTP学习目录

    前面的话 除了HTML.CSS.javascript这三门前端基础知识之外,HTTP恐怕是前端工程师最需要掌握的知识了,它是前端和后端沟通的桥梁,前端工程师需要能够调试HTTP.修复网络传输中可能遇到 ...

  4. Jquery AutoComplete实现搜索自动完成

    AutoComplete控件就是指用户在文本框输入前几个字母或是汉字的时候,该控件就能从存放数据的文本或是数据库里将所有以这些字母开头的数据提示给用户,供用户选择,提供方便. 例子: <!doc ...

  5. AMD的cpu如何安装Mac OS

    AMD的cpu如何安装Mac OS       经过一个月的折腾,终于成功的安装了自己的Mac系统,并且能够成功的启动.在这里分享一下自己安装的经验.      为了安装方便,有不影响原来的系统的使用 ...

  6. 深度了解Android 7.0 ,你准备好了吗?

    作者:Redyan, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/288.html ...

  7. 如何在shell脚本中导出数组供子进程使用

    功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量 ...

  8. 同一环境下新建Standby RAC库

    需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...

  9. python excel操作总结

    1.openpyxl包的导入 Dos命令行输入 pip install openpyxl==2.3.3 这里注意一下openpyxl包的版本问题 版本装的太高有很多api不支持了,所以笔者这里用的是2 ...

  10. 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据

    是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...