尽管JavaScript中有对象的概念,但一般我们并不说JavaScript是面向对象的编程语言,因为它不具备面向对象的一些最基本特征。

在c++/Java等这些面向对象的编程语言中,我们要定义一个对象,就必须要先把对象的一些特征抽象出来,也就是说我们必须先定义一个类,然后以这个类作为模版来创建对象。JS有些不同,可以直接以字面量的形式创建对象,代码如下:

    <script type="text/javascript">
var obj = {
name:"Jane",
age:30,
getInfo:function(){
return "name:"+ this.name +" "+"age:" + this.age;
}
}
alert(typeof obj);//object
alert(obj.getInfo());//name:Jane age:30
</script>

JS可以通过{}形式来创建对象,在上面代码中,我们创建了一个对象,赋值给obj变量,该对象有两个成员属性,和一个成员方法。这是创建对象的一种较为简单的方式,接下来我们在来看看另外一种比较普遍的形式。

可能你会想到面向对象语言中的”类”,如果你阅读过ECMAScript规范,你会发现,在ECMAScript规范中,我们甚至几乎找不到”类”(class)的概念,取而代之的是”Object”,为了和对象(object)进行区分,笔者喜欢把它称为对象模版。

这里我们不得不深入的了解一下JS的函数,JS的函数比较特殊,主要有两个作用:

第一个用途是和一般的面向过程语言(如c语言)中函数作用相同:將特定功能的代码进行封装,作为一个功能模块,以达到代码重用的目的。

另外一个作用就是作为对象模版来构造对象。看下面的代码:

    <script type="text/javascript">
function func(name,age)
{
this.name = name;
this.age = age;
return "name:"+name + " " + "age:" + age;
}
var info = func("Bob",20);//调用函数
var person = new func("Smith",30);//创建对象
alert(typeof info);//string
alert(typeof person);//object
</script>

我们定义了一个func,可以把它用作两中用途:

var info = func("Bob",20);//调用函数

此处为函数调用,该函数调用返回一个字符串,当我们在前面加上一个new关键字的时候,意义就完全不一样了。

var person = new func("Smith",30);//创建对象

此时函数就变成了对象模版,它又有点类似于java/c++中的构造函数,可以使用参数对成员属性进行初始化。

JS提供了一些内置的函数(或者说是对象模版),比较常用的有:

  • String()
  • Number()
  • Boolean()
  • Array()
  • Object()
  • Function()
  • RegExp()
  • Date()
  • Error()
  • Symbol()— ES6新增!

如果你对Java比较熟,你会发现这里的String()有点类似于Java中的String(..)构造函数,我们可以通过下面这种形式创建一个字符串对象:

    <script type="text/javascript">
var strObj = new String("hello world!");
alert(typeof strObj);//object
alert(strObj instanceof String);//true
alert(strObj);
</script>

需要注意的是,这里的strObj是对基本类型string进行包装后的object类型。string和String之间的关系有点类似于Java中的int和Integer。

既然有了string类型,为什么JavaScript还会提供内置对象模版String呢?看下面的例子:

        String.prototype.getLen = function()
{
return this.length;
}
var strObj = new String("hello world!");
alert(strObj.getLen());

有时候我们需要对字符串增加自定义的操作,例如这里我们可以增加一个getLen方法获取字符串的长度,我们只需要使用prototype属性对String进行扩展即可(有JS基础的朋友应该知道是怎么回事,这里不做过多介绍)。

这里我们只是以String对象模版作为一个例子,其他的内置对象模版都可以有类似的操作。

你不知道的JavaScript(五)内置对象模版的更多相关文章

  1. 一、JavaScript概述 二、JavaScript的语法 三、JavaScript的内置对象

    一.JavaScript的概述###<1>JavaScript的概念 又称ECMAScript,和java没有任何关系 嵌入在HTML元素中的 被浏览器解释运行的 一种脚本语言. ###& ...

  2. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式

    JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMASc ...

  3. JavaScript 标准内置对象Promise使用学习总结

    Javascript标准内置对象Promise使用学习总结   by:授客 QQ:1033553122 1.   基础用法 var condition = true; let p = new Prom ...

  4. JavaScript 标准内置对象

    JavaScript 标准内置对象或称全局的对象(global objects)不要和 全局对象(global object)混淆.这里说的全局的对象是说在全局作用域里的对象,全局作用域包含了全局对象 ...

  5. javaScript的内置对象

    javaScript 有11种内置对象: Array . String .Date .Math . Boolean .Number . Function .Global .Error . RegExp ...

  6. 【JavaScript】内置对象Math

    Math是具有用于数学常数和函数的属性和方法一内置对象.不是函数对象. 描述编辑 不像其他的全局对象,Math不是一个构造函数.所有属性和方法Math都是静态的.你指的是常数pi为Math.PI你调用 ...

  7. JavaScript的内置对象和浏览器对象

    在javascript中对象通常包括两种类型:内置对象和浏览器对象,此外,用户还可以自定义对象. 对象包含两个要素:1.用来描述对象特性的一组数据,也就是若干变量,通常称为属性.2.用来操作对象特性的 ...

  8. JavaScript常用内置对象(window、document、form对象)

    由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...

  9. JavaScript的内置对象(Global对象)

    内置对象的定义 由 javaScript 实现提供的.不用自己创建,这些对象在 ECMAScript 程序执行之前就已经存在了. 意思就是说,开发人员不必显示地实例化内置对象:因为它们已经实例化了. ...

随机推荐

  1. Rabbit MQ 学习 (二)

    接连上一篇 :安装Erlang环境 之后,这篇安装 Rabbit Server 官网下载安装包:http://www.rabbitmq.com/install-windows.html 打开安装一路下 ...

  2. javascript中封装scoll()方法

    function scroll() { var scrollTop = window.pageYOffset || document.documentElement.scrollTop || docu ...

  3. 路飞学城Python-Day40(第四模块复习题)

    数据库 一.简答题 1.说说你所知道的MySQL数据库存储引擎,InnoDB存储引擎和MyISM存储引擎的区别? 1.InnoDB存储引擎(MySQL默认存储引擎),支持事务,其设计目标主要面向联机事 ...

  4. Pyhton学习——Day22

    #有缩进的代码表示局部作用域的代码#if_name_ =='_main_' # while True#先引入一个os模块import os,sys,time,json# print(os.path.d ...

  5. Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 作者:offbye 出处:http://blog.csdn.net/offbye/article/details/6592563 Git是使用branch来管理不 ...

  6. [LUOGU]3919 【模板】可持久化数组

    用可持久化线段树维护可持久化数组.可持久化线段树见之前发的主席树模板 #include <iostream> #include <cstdio> #include <cs ...

  7. MBR和GPT分区学习

    1.MBR 早期的windows和linux都采用的MBR的方法来处理开机引导程序和分区表,对于linux的MBR分区来讲,0柱面0磁道1扇区用于引导驱动程序,第一扇区有512个字节,前446字节存放 ...

  8. Android开发进度01

    1,今日:目标:完成eclipse中Android sdk和ADT的创建,下载tools工具,创建Android虚拟机 2,昨天:无 3,收获:Android sdk manager需要下载的东西:学 ...

  9. UGUI图集管理

    using UnityEngine; using System.Collections; using System.Collections.Generic; //纹理图集加载管理 public cla ...

  10. pytorch 1 torch_numpy, 对比

    import torch import numpy as np details about math operation in torch can be found in: http://pytorc ...