你不知道的JavaScript(五)内置对象模版
尽管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(五)内置对象模版的更多相关文章
- 一、JavaScript概述 二、JavaScript的语法 三、JavaScript的内置对象
一.JavaScript的概述###<1>JavaScript的概念 又称ECMAScript,和java没有任何关系 嵌入在HTML元素中的 被浏览器解释运行的 一种脚本语言. ###& ...
- 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式
JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMASc ...
- JavaScript 标准内置对象Promise使用学习总结
Javascript标准内置对象Promise使用学习总结 by:授客 QQ:1033553122 1. 基础用法 var condition = true; let p = new Prom ...
- JavaScript 标准内置对象
JavaScript 标准内置对象或称全局的对象(global objects)不要和 全局对象(global object)混淆.这里说的全局的对象是说在全局作用域里的对象,全局作用域包含了全局对象 ...
- javaScript的内置对象
javaScript 有11种内置对象: Array . String .Date .Math . Boolean .Number . Function .Global .Error . RegExp ...
- 【JavaScript】内置对象Math
Math是具有用于数学常数和函数的属性和方法一内置对象.不是函数对象. 描述编辑 不像其他的全局对象,Math不是一个构造函数.所有属性和方法Math都是静态的.你指的是常数pi为Math.PI你调用 ...
- JavaScript的内置对象和浏览器对象
在javascript中对象通常包括两种类型:内置对象和浏览器对象,此外,用户还可以自定义对象. 对象包含两个要素:1.用来描述对象特性的一组数据,也就是若干变量,通常称为属性.2.用来操作对象特性的 ...
- JavaScript常用内置对象(window、document、form对象)
由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...
- JavaScript的内置对象(Global对象)
内置对象的定义 由 javaScript 实现提供的.不用自己创建,这些对象在 ECMAScript 程序执行之前就已经存在了. 意思就是说,开发人员不必显示地实例化内置对象:因为它们已经实例化了. ...
随机推荐
- Exception异常常见属性
废话少说,直接上代码: try { int n = Convert.ToInt32("@"); } catch(Exception ex) { Console.WriteLine( ...
- rel= "noopener"
rel= "noopener" <a href= "https://www.xiaogezi.cn/" target= "_blank" ...
- R dataframe 去除行号
原先的行号是这样的:
- ZBrush中Blob点滴笔刷介绍
对于ZBrush®来说,笔刷的使用时至关重要的,ZBrush中给我们提供了越来越多的笔刷的同时,我们也要根据经验来合理选择笔刷.本文内容小编将分享Blob点滴笔刷的简单介绍,该笔刷在使用时笔头犹如一股 ...
- 初见UDP_Client
from socket import *ip_prot = ('192.168.55.1',8080)buffer_size = 1024udp_client = socket(AF_INET,SOC ...
- php && 运算符使用说明
“&&” 运算符的用法: ;;echo $test;//输出:000
- CefSharp获取页面Html代码的两种方式
CefSharp在NuGet的简介是“The CefSharp Chromium-based browser component”,机翻的意思就是“基于Cefsharp Chromium的浏览器组件” ...
- luogu 自适应Simpson1
自适应simpson1 题意 求一个定积分 (可以手推公式,但是我不想推怎么办) 解法 用一个又一个的二次函数覆盖原函数,则可以近似的得到原函数的积分.(这就是Simpson) 模板在下面: #inc ...
- 【Paper Reading】Deep Supervised Hashing for fast Image Retrieval
what has been done: This paper proposed a novel Deep Supervised Hashing method to learn a compact si ...
- Numpy的使用规则
之前安装的python版本是3.7 各种库都是自己一个一个下载安装的 很操心 各种缺功能 后来发现了anaconda 啊 真是一个好东西 简单来说 它就是一个涵盖大部分常用库的python包 一次安装 ...