《JavaScript启示录》——1.17 动态属性支持易变对象

1.17 动态属性支持易变对象

复杂对象是由动态属性构成的。这使得用户自定义对象和大多数原生对象可以产生突变。这意味着JavaScript中的大多数对象都可以随时更新或更改。正因为如此,可以通过增加原生对象,来改变JavaScript本身的原生预配置特性。然而,我并不是建议大家这样做,事实上,我认为不应该这样做,但我们不能掩盖这些用法的有用之处。

也就是说,我们可以在原生构造函数上存储属性,并在原型对象上,向原生对象额外添加新方法。

如下代码,改变了String()构造函数和String.prototype。

<!DOCTYPE html><html lang="en"><body><script>

// 利用augmentedProperties属性扩展内置的String构造函数Function()
String.augmentedProperties = [];

if (!String.prototype.trimIT) { // 如果原型中没有trimIT(),就添加它
    String.prototype.trimIT = function () {
        return this.replace(/^\s+|\s+$/g, '');
}
    // 添加trimIT字符到augmentedProperties数组
    String.augmentedProperties.push('trimIT');
}
var myString = ' trim me ';
console.log(myString.trimIT()); // 调用自定义的trimIT方法,输出 'trim me'

console.log(String.augmentedProperties.join()); // 输出 'trimIT'

</script></body></html>

希望大家能够明白,JavaScript中的对象是动态的。这使得JavaScript中的对象是可以改变的。从本质上讲,整个JavaScript语言都可以变为自定义版本(例如trimIT方法)。再次说明,我不推荐这种做法,我只是指出它是JavaScript中对象特性的一部分。

注意

如果更改了JavaScript的原生内部运作机制,你可能会获得一个自定义版本的JavaScript来进行程序处理。但一定要谨慎,因为大多数人会认为JavaScript不管在什么时候使用,都是相同的。

时间: 2024-12-11 11:24:11

《JavaScript启示录》——1.17 动态属性支持易变对象的相关文章

《JavaScript启示录》——1.4 用户自定义/非原生对象构造函数

1.4 用户自定义/非原生对象构造函数 正如在Person()构造函数中所看到的,我们可以创建自己的构造函数,从中可以生成不只一个,而是多个自定义对象. 下面列出了熟悉的Person()构造函数: <!DOCTYPE html><html lang="en"><body><script> var Person = function (living, age, gender) { this.living = living; this.age

《JavaScript启示录》——导读

前言 本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现.本书的写作目的也不是鉴别JavaScript语言特点的好坏.本书并不是一本完整的参考指南.它面向的读者人群并不是编程新手或对JavaScript完全陌生的人员.同时,它也不是一本JavaScript攻略手册.关于上述这些方面的书籍都已经面世. 本书的撰写意图是通过考察原生JavaScript对象和不同环境对原生对象的支持的细微差别,来给读者展现准确的JavaScript世界观:复杂值.原始值.作用域.继承

《JavaScript启示录》——1.20 构造函数创建的实例可拥有自己独立的属性(实例属性)

1.20 构造函数创建的实例可拥有自己独立的属性(实例属性) 在JavaScript中,对象在任何时候都可以扩展(即动态属性).正如前面提到的,确切地说,JavaScript拥有易变对象(mutable object).这意味着通过构造函数创建的对象可以扩展属性. 下面的代码通过Array()构造函数创建了一个实例,然后利用其属性进行扩展. <!DOCTYPE html><html lang="en"><body><script> var

《JavaScript启示录》——第1章 JavaScript对象 1.1创建对象

第1章 JavaScript对象 1.1 创建对象 在JavaScript中,对象为"王":JavaScript里的几乎所有东西都是对象或者用起来像对象.理解了对象,就能够理解JavaScript.因此,让我们来查看一下JavaScript中的对象创建. 对象只是一组有命名值(也称为属性)集合的容器.在阅读JavaScript代码之前,让我们先来推理一下.以我自己为例,我们可以用简单的语言在表格中表达"cody": 上述表格中的"cody"一词只

Javascript实例教程(17) 使用字符串函数

javascript|函数|教程|字符串 字符串对象提供了许多方法,但是很少的程序设计人员充分利用它们,这对于一个程序员来说,不能不说这是一种缺陷.字符串提供的方法可以用于操作字符.产生HTML标签以及搜索字符串等等. 下面首先说说什么是字符串.在JavaScript语言中,字符串就是一种对象.就象在Java中,它们不是作为一系列的字符被存储的,所以字符串的操作必须使用内置的构造器和设置函数来完成.在后来的版本中有了字符串构造器和更多的关于对象的概念.在这个层次上说,字符串是由字母而不是数字组成

《JavaScript启示录》——1.21 JavaScript对象和Object()对象

1.21 JavaScript对象和Object()对象 不要将一般术语"JavaScript对象"与Object()对象混淆.前者指的是JavaScript中对象的概念.Object()对象(如var myObject = new Object())是JavaScript中表示的一个非常特殊的值.就像Array()对象是一种被称为array的对象类型,Object()对象是一种被称为object的对象类型.重点是,Object()构造函数生成空的通用对象容器,该容器叫做Object(

Javascript学习8 - 脚本化文档(Document对象)

原文:Javascript学习8 - 脚本化文档(Document对象)    每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Document对象.    一个文档对象模型或者说DOM就是一个API,它定义了如何访问组成一个文档的对象.W3C定义了一个标准的DOM,使用Document API,可以作用于HTML和XML文档的通用功能,添加特定于HTML的属性和方法.    Document对象的详细属性可以见:http:

Javascript中prototype属性实现给内置对象添加新的方法

  本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" con

Android 4.3将支持更多缓冲区对象

谷歌已经开始秘密测试Android 4.3了,这似乎暗示即将开幕的I/O开发者大会上,我们将看不到Android 5.0的身影了? HTC的工程师透露,Android 4.3将会加入Bluetooth Low Energy(低功耗蓝牙技术)功能,通过开放API,开发者可以在这个功能上开发出很多衍生的应用,如健康类应用心率监视器等等. 虽然之前已有厂商已通过自己的努力添加了上述功能,但Android官方直到现在都还没收纳它.此外,开发者还透露,Android新版本系统还将支持OpenGL ES 3