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. 分布式搜索之搭建Solrcloud(Solr集群)

    Solrcloud介绍: SolrCloud(solr集群)是Solr提供的分布式搜索方案. 当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud. 当索引量很大,搜索请求并发很高时,同 ...

  2. 记录UITextField删除状态

    self.testTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; self.testTextField. ...

  3. EntityFramewok Core 1.1连接MSSql数据库详解

    最近在研究ASP.NET Core,其中就用到了Entity Framework Core,对于Entity Framework Core连接SqlServer数据库,使用Code Frist创建数据 ...

  4. executssql 函数的每一句代码的意思

    Public Function Executesql(ByVal sql As String, Msgstring As String) As ADODB.Recordset Dim cnn As A ...

  5. 安卓UDP通信2

    服务器实现一发一收 服务器代码: import java.net.*; import java.io.*; public class udpRecv2 { /* * 创建UDP传输的接收端 * 1.建 ...

  6. 做一个360度看车的效果玩玩(web)

    前几天在 Lexus 官网看到有这样的一个效果:http://www.lexus.com.cn/models/es/360 于是顺手打开控制台看了下他们是怎么做的,发现使用的技术还是比较简单的,通过背 ...

  7. Codeforces Round #396.D

    D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...

  8. dev简单实现柱状图,曲线图

    1.数据源代码: DataTable dt = new DataTable(); dt.Columns.Add("A"); dt.Columns.Add("B" ...

  9. flask扩展模块flask-sqlachemy 的使用---mysql数据库

    该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该 安装pymysql:pip install ...

  10. 解析java泛型(二)

    上篇我们简单的介绍了java中泛型的最基本的内容,知道了什么是泛型以及泛型对我们的程序编写有什么好处,最后一类型限定收尾.本篇将从类型限定开始阐述java泛型中很重要的概念:通配符 一.何为通配符   ...