《JavaScript启示录》——1.15 复杂对象具有动态属性

1.15 复杂对象具有动态属性

一个新变量,指向现有的复杂对象,并没有复制该对象。这就是复杂对象有时被称为引用对象的原因。复杂对象可以根据需求有任意多个引用,即使对象改变,它们也总是指向同一个对象。

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

var objA = { property: 'value' };
var pointer1 = objA;
var pointer2 = pointer1;

// 更新objA.property, 所有引用(pointer1和pointer2)都被更新了
objA.property = null;

// 输出 'null null null' ,因为objA, pointer1和pointer2引用的都是同一对象
console.log(objA.property, pointer1.property, pointer2.property);

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

复杂对象支持动态对象属性,因为我们可以定义对象,然后创建引用,再更新对象,并且所有指向该对象的变量都会“获得”更新。

时间: 2024-10-31 06:28:55

《JavaScript启示录》——1.15 复杂对象具有动态属性的相关文章

《JavaScript启示录》——导读

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

《JavaScript启示录》——1.3 JavaScript原生/内置对象构造函数

1.3 JavaScript原生/内置对象构造函数 JavaScript语言包含9个原生(或内置)对象构造函数.JavaScript使用这些对象来构建JavaScript语言."构建"的意思是指,这些对象是用于表达JavaScript代码中的对象值,以及协调语言中的多个特性.因此,原生对象构造函数是多方面的,它们生成对象,但也被用于促进语言的编程约定的形成.例如,函数是Function()构造函数创建的对象,但作为构造函数,使用new关键字调用后,它们也可用于创建其他对象. 下面列出了

《JavaScript启示录》——1.2 JavaScript构造函数构建并返回对象实例

1.2 JavaScript构造函数构建并返回对象实例 构造函数的作用是创建多个共享特定特性和行为的对象.构造函数主要是一种用于生成对象的饼干模具,这些对象具有默认属性和属性方法. 如果说"构造函数只是一个函数",那么我会说"你是对的,除非使用new关键字来调用该函数."(如new String('foo')).如果使用new调用某函数,该函数则担任一个特殊的角色,JavaScript给予该函数特殊待遇,将该函数的this值设置为正在构建的新对象.除了这个特殊行为,

javascript 里面的 Object Event 对象 比较

问题描述 javascript 里面的 Object Event 对象 比较 今天在写一段事件代码时发现了这个问题,请问划线处为什么输出false 源码 //获得鼠标事件 mouseup mousedown 输出你按了鼠标的 左键(0) 右键(2) 中间键(1) function getButton(e) { var ent=window.event; alert(ent==window.event); //false alert(ent==e); //false if(e) { return

Javascript学习6 - 类、对象、继承

原文:Javascript学习6 - 类.对象.继承     Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成的.     在Javascript中,可以把对象(object)定义为"属性的无序集合",每个属性存放一个原始值.对象或者函数.理解这一点非常重要. ECMAScript定义:对象由特性(attribute)构成,特性可以是原始值,可以是引用值,如果特性存放的是函数,它将被看作对

Javascript遍历DOM结构和对象结构

在实际工作中,记住浏览器中对象的属性.方法几乎是件不可能完成的任务,保持一份资料或网址是个好办法.但是查阅资料也是要花费不少时间,如果能有个脚本将对象的结构打印出来,将会加速开发进程. 下面是我编写的查看对象结构例子,请下载附件获取可执行代码: //Animal是一个对象 Animal = { createNew: function( bundle ) { var animal = {}; var protect = bundle || {};//bundle传递的是指针,修改protect时外

javascript围观IE10中window对象的结构

我在<<javascript遍历DOM结构和对象结构>>一文中提供了一个遍历对象结构的函数,利用这个函数,展现IE10中window对象的结构(还真是不少啊-调试代码也在呢-)如下: 调试信息: [Object] window |--[function] addEventListener = function addEventListener() { [native code] } |--[function] alert = function alert() { [native c

Javascript中的Array数组对象详谈

 这篇文章主要介绍了Javascript中的Array数组对象,需要的朋友可以参考下 首先数组的定义以及初始化的方法:  var myArray = new Array(1,3.1415,"love"); //这里注意myArray数组中的元素不只是同一种数据类型的元素,可以有整形,有浮点型,有字符串等等都可以.这里充分展示了javascript作为一种语言对数据类型的弱化,语言更加的随意化,简便化.就行定义对象的时候用var一样.  在此介绍的有限,同时有一些我没有给出结果,希望大家

面向对象-javascript中这两种对象属性有什么区别?

问题描述 javascript中这两种对象属性有什么区别? 第一种:function aaa(){} aaa.a=111; 第二种:function bbb(){} bbb.prototype.b=111; 我在csdn问过第一种,大部分人说属于面向对象的范畴. 但是我看了几篇js面向对象博客,都是用第二种原型的方式: 所以想知道这两种给对象添加属性的行为,在实际应用中有什么区别? 解决方案 如果把aaa,bbb作为方法来看,这两者没有区别. 如果把aaa,bbb作为类来看,那有区别. aaa.