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. 简单的Elf逆向Writeup

    ElfCrackMe1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acrony ...

  2. spring和UEditor结合

    前言 春节无聊,就去弄一下富文本编辑器,然后百度了一番,很多说百度的UEditor不错,然后去官网照着文档弄一遍,是挺简单好用的.然后想把这玩意结合到自己的一个spring项目里面,果然还是在点上传图 ...

  3. oracle 游标的使用

    额,一直提起游标就头疼,总感觉是很高大上的东西,望而却步... 今天要做的东西涉及到了实时更新数据,要用到JOB 存储过程  游标 通过在网上查资料,请教同事,也开始继续深入oracle,,,,小菜啊 ...

  4. JUnit与JMock学习

    JUnit与JMock学习 测试驱动编程和持续集成部署应该说是现在软件开发者的必备武器,不过跟其他很多好东西一样,在我们公司的推广总要慢上一拍,毕竟老板看的是你能够把功能实现好让客户满意,所以能不折腾 ...

  5. ASP.NET应用程序的文件类型及文件夹列表

    文件类型: 1. *.aspx文件:这类文件是ASP.NET Web页面,它包括用户接口和隐藏代码. 2. *.ascx文件:这类文件是用户控件.用户控件同Web页面非常相似,但用户不能直接访问用户控 ...

  6. SpringMvc拦截器小测试

    前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...

  7. devexpress表格gridcontrol实现分组,并根据分组计算总计及平均值

    1.devexpress表格控件gridcontrol提供了强大的分组功能,你几乎不用写什么代码就可以实现一个分组功能,并且可根据分组计算总计和平均值.这里我例举了一个实现根据班级分组计算班级总人数, ...

  8. VSCode从非根目录编译golang程序

    1.问题提出 "习惯在项目目录里建src放源码文件,根目录里放配置文件或者别的什么,在交付时直接忽视掉src目录就行了,但vscode好像不能这样愉快的玩耍..."??? 要实现把 ...

  9. 【SysML】用例图

    引言 对于系统工程师来说,设计用例图是一种极为常见的建模活动.用例图是一种黑盒视图,通过向读者传递一系列的用例以及相关的参与者,对系统对外提供的服务或系统具备的行为进行建模.在详细讨论SysML的用例 ...

  10. jQuery的动态绑定事件的应用

    注意:bind()的事件绑定是只对当前页面选中的元素有效.如果你想对动态创建的元素bind()事件,是没有办法达到效果的 <script src="jquery-1.11.2.min. ...