JavaScript 原生对象及扩展

内置对象与原生对象

内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集;而后者包括了一些在运行过程中动态创建的对象。

2993868520-5518de2b15e17_articlex

原生对象(New后的对象)

ECMA-262 把原生对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。包括如下:

由此可以看出,简单来说,原生对象就是 ECMA-262 定义的类(引用类型)。

来源: http://es5.github.com/#x4.3.6

内置对象(不需要New)

定义:由ECMAScript实现提供的对象,独立于宿主环境,在一个脚本程序执行的开始处。

:每个内置对象(built-in object)都是原生对象(Native Object),一个内置的构造函数是一个内置的对象,也是一个构造函数。

来源:http://es5.github.io/#x4.3.7

举个栗子:

ECMA-262][2 只定义了两个新的内置对象,即 GlobalMath (它们也是原生对象,根据定义,每个内置对象都是原生对象)。

以下是ECMA-262定义的内置对象(built-in):

3209960796-551a9ed6cc4af_articlex

我们也可以修改内置对象的原型

以上代码将输出:

注意:扩展原型是很危险的:

输出: FAIL We should only have 3 properties.

如果不是有特殊需要而去扩展原生对象和原型(prototype)的做法是不好的

除非这样做是值得的,例如,向一些旧的浏览器中添加一些ECMAScript5中的方法。
在这种情况下,我们一般这样做:

用原型扩展对象

对js原生对象的扩展无非就是往prototype里注册,例如,我们可以往String对象里扩展ltrim,rtrim等方法。js每个对象都继承自Object,并且,对象和其他属性都通过prototype对象来继承。通过prototype对象,我们可以扩展任何对象,包括内建的对象,如StringDate

String对象的扩展

Date对象的扩展

getDaysInMonth:获取某月有多少天

使用原生js实现复制对象及扩展

jQueryextend()方法能很方便的实现扩展对象方法,这里要实现的是:使用原生js实现复制对象,扩展对象,类似jQuery中的extend()方法

es5-safe 模块

es5-safe 模块里,仅扩展了可以较好实现的可以安全使用的部分方法,包括:

详情:http://es5.github.io/

对象的创建

JavaScript 支持四种类型的对象:内部对象、生成的对象、宿主给出的对象(如 Internet 浏览器中的 windowdocument)以及ActiveX 对象(外部组件)。

Microsoft Jscript 提供了 11 个内部(或“内置”)对象。它们是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error 以及 String 对象。每一个对象有相关的方法和属性,

JavaScript中对象的创建有以下几种方式:

一、使用内置对象

内置对象列表

以上资料来源于:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects#.E5.9F.BA.E6.9C.AC.E5.AF.B9.E8.B1.A1

自定义对象构造

创建高级对象构造有两种方式:使用“this”关键字构造、使用原型prototype构造

Date对象

get系列方法

set系列方法

toString系列方法

Array对象

属性

方法

这些方法可以改变数组自身:

Accessor 方法

这些过程不改变数组自身

循环(迭代)过程

总结:

Boolean

属性

方法

String 对象

属性

方法:

注意:String 对象的方法 slice()、substring()substr() 都可返回字符串的指定部分。强烈建议在所有场合都使用 slice()方法。

RegExp对象

属性

方法

Object对象

当以非构造函数形式被调用时,Object 等同于 new Object()

属性或方法

Object的每个实例都具有共同的基本属性和方法

属性或者方法 说明
constructor 指向创建当前对象的构造函数
hasOwnProperty(name) 检测给定属性name在实例对象(不是原型对象)中是否存在。name以字符串形式指定
isPropertyOf(object) 检测传入的对象object是否该方法调用者的原型对象。一般格式:Class.prototype.isPropertyOf(object)
propertyIsEnumerable(pr) 检测属性pr能否用for-in循环枚举。属性pro用字符串形式指定
toLocaleString() 返回对象的字符串表示。与地区和环境对应
toString() 返回对象的字符串表示
valueOf() 返回对象的字符串、数值或布尔值表示

静态方法

全局属性和方法

全局方法

430429453-551a9fd9d679d_articlex-1

全局属性

360280168-551a9fe987820_articlex

1 3 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部