/**
* 1.对象
* 对象是一种复合数据类型,它们将多个数据值集中在一个单元中,而且运行使用名字来存取这些值。解释对象的另一种方式是,对象是一个无序的属性集合,每个属性都有自己的名字和值。存储在对象中的已命名的值可以是数字和字符串这样的原始值,也可以是对象。
*/
var o = new Object();
/**
* 2.对象直接量创建对象
* 对象直接量由属性说明列表构成,列表包含在大括号中,其中的属性说明由逗号隔开。
* 对象直接量中的每个属性说明都由属性名加上冒号和属性值构成。
*/
var zhangsan = {name:"zhangsan", age:34, married:true};
window.alert(typeof zhangsan); //输出object
/**
* 3.属性的读取和设置
* 对象的属性通过点号运算符读取和设置。对象的新属性可以通过直接创建。
*/
window.alert(zhangsan.car); //输出undefined
zhangsan.car="BMW"; //直接赋值
window.alert(zhangsan.car); //输出BMW
/**
* 4.属性的枚举
* 通过for循环枚举每一个属性,顺序不能保证固定。
* 注意枚举出的是属性名称,并不是属性值。
*/
var values = "";
for(var v in zhangsan)values += v+"\n"; //枚举每一个属性
window.alert(values);
/**
* 5.属性的删除使用delete,如delete zhangsan.car
*/
/**
* 6.构造函数
* 构造函数是具有两个特性的javascript函数:
* (1)它由new 运算符调用;
* (2)传递给它的是一个对新创建的空对象的应用,将该引用作为关键字this的值,而且它还要对新创建的对象进行适当的初始化。
* 记住:构造函数只是初始化对象,并不返回新创建的对象。
*/
function Rectangle(w, h){
this.width = w;
this.height = h;
}
var ret1 = new Rectangle(2, 1);
//注意构造函数是如何使用它的参数来初始化this关键字所引用的对象的属性
/**
* 7.对象的方法
* 所谓方法,就是通过对象调用的javascript函数。我们知道,函数就是数值,它们所使用的名字没有任何特殊之处,可以将函数赋给任何变量,甚至赋给一个对象的任何属性,那么这个属性就是对象的方法了。
* 在对象的方法体内,关键字this的值就成了调用该方法的对象。
*/
function print(){}
ret1.print = print;
/**
* 8.关于this的讨论
* 任何一个用作方法的函数都会得到一个额外的实际参数,即调用该函数的对象。由于方法通常是对那个对象执行某种操作,所以要表达函数作用于对象这一事实,最好采用方法的调用语法。
* 如rect.setSize(width, height);
* setSize(rect, width, height);
* 虽然这两行代码对对象rect执行相同的操作,但是第一行代码在表达对象rect是操作的焦点(或者说操作的目标)这一观点时显然清楚得多。
*
* 虽然有区别地对待函数和方法比较有用,但实际上它们之间的差别并不大。回忆一下,函数是存储在变量中的值,而那个变量也不过是全局对象的一个属性。因此,当你调用一个函数时,实际上调用的是全局对象的一个方法。
* 在这样的函数中,关键字this引用的是全局对象。所以函数和方法之间在技术上没有差别,真正的差别在于设计和目的上,方法是用来对this对象进行操作的,而函数通常会是独立的,并不需要使用this对象。
*/
(function f(){
var values = "";
for(var v in this)values += v + " ";
window.alert(values);
})(); //返回window对象的所有属性和方法名称
/**
* 9.原型对象和继承
* javascript每个对象都有原型对象,每个对象都继承原型对象的所有属性。
* 一个对象的原型是由创建并初始化该对象的构造函数定义的。javascript中的所有函数都有prototype属性,它引用了一个对象。虽然原型对象初始化时是空的,
* 但是你在其中定义的任何属性都会被该构造函数创建的所有对象继承。
*
* 构造函数定义了对象的类,并初始化了类中状态变量的属性,如width和height。因为原型对象和构造函数关联在一起,所以类的每个成员都从原型对象继承了相同的属性。
* 这说明原型对象是存放方法和其他常量属性的理想场所。
*
* 注意,继承是在查询一个属性值时自动发生的。属性并非从原型对象复制到新的对象的,它们只不过看起来像是那些对象的属性。这其中有两点重要的含义。
* 一是使用原型对象可以大量减少每个对象对内存的需求量,因为对象可以继承许多属性。二是即使属性在对象被创建之后才添加到它的原型对象中,对象也能够继承这些属性。
*
* 每个类都有一个原型对象,这个原型对象都具有一套属性。但是实际上却有大量的类实例,每个实例都能继承原型对象的属性。由于一个原型对象能够被多个对象继承,所以javascript
* 必须强化读写属性值之间的不对称性。在读对象o的属性p时,javas会首先检查o是否具有一个名为p的属性。如果o没有这个属性,javascript就会再检查o的原型对象是否具有这个属性。这样才使得以原型为基础的继承机制起作用。
*
* 但是当写一个属性的值时,javascript并不会检查原型对象中是否有这个属性的值。因为,如果允许改变原型对象的这一属性,那就改变了整个对象类的p值,包括其他new出来的对象变量的属性值。
*
* 因此,属性的继承只发生在读属性值时,而不会发生在写属性值时。如果你设置的对象o的属性p是对象o从它的原型对象继承而来的,那么结果就是你直接在对象o中创建了一个新属性p。现在o已经有了一个自己的名为p的属性,它就不会再从它的原型对象继承p的值了。当你读p的值时,java首先查询o的属性。
* 由于它发现了o中定义的p,就不必再查询原型对象,也就不会再发现原型对象中定义的p值了。我们称之为o中的p"遮蔽"了或者说"隐藏"了原型对象中的属性p。
*
* 因为原型对象的属性被一个类的所有对象共享,所以通常只用它们来定义类中所有对象的相同的属性。这使得原型对象适用于方法定义和常量的定义。
*/
/**
* 10. 实例属性、实例方法、类属性、类方法
* 每个对象都有它自己单独的实例属性的副本。我们说javas中的实例属性是那些在对象中用构造函数创建的或初始化的属性。
*
* 实例方法是由特定对象或实例调用的。实例方法使用了关键字this来引用它们要操作的对象或实例。虽然一个类的任何实例都可以调用实例方法,并不意味着每个对象都像实例属性那样含有自己专有的方法副本。相反,每个实例方法都是由类的所有实例共享的。在javascript中,给类定义一个实例方法,是通过把构造函数的原型对象中的一个属性设置为函数值来实现的。
* 这样,由那个构造函数创建的所有实例都会共享一个已继承的对函数的引用。
*
* 类属性表示在所有类实例中只有一个副本。在javascript中,类属性本质上就是全局变量。但是它们与一个类关联在一起,在javascript的名字空间中拥有一个逻辑位置,这样它们就不会被其他的同名属性覆盖。
* 如Circle.PI=3.14。虽然Circle是一个构造函数,但是由于javascript函数是对象,所以我们可以创建函数的属性,就像创建对象的属性一样。
*
* 类方法与类属性相似。在javascript中,要定义一个类方法,只需要用合适的函数作为构造函数的属性即可。
*/
/**
* 11. 父类和子类
* 在javascript中,Object类所有类的父类,处于类层次图的最上层。所有的类都继承了Object类的所有方法。
*
* 我们已经学会了对象如何从它们构造函数的原型对象中继承属性,那么它们又是如何继承类Object的属性哪?我们知道,原型对象本身就是一个对象,它是由构造函数Object()创建的。
* 这就意味着原型对象继承了Object.prototype属性。因此,ret1会继承Rectangle.prototype的属性,还会继承Object.prototype的属性。整因为所有对象的prototype属性会继承Object.prototype属性,
* 所以所有javascript子类都继承了Object的所有属性,也即Object类是javascript的根类,处于类层次图的最顶层。
*/
/**
* 12.使用[]读取和设置对象的属性
* 通常会采用点号运算符访问对象的属性,但是点号后面的属性是标识符。在javascript中,标识符必须逐字输入,它们不是一种数据类型。如果程序中属性是动态的、不确定的,那么我们将无法访问。
* 前面解释过,对象是一群属性的集合,也就是数组。那么可以使用数组访问成员的运算符[]来访问对象的属性。[]中是属性名称,是字符串类型,我们就可以动态的确定对象属性名称了。
*
* 使用[]运算符的对象我们也称之为关联数组。关联数组是一种数据结构,允许你动态地将任意值和任意字符串关联在一起。实际上,javascript对象在内部就是用关联数组实现的。使用点号运算符只是为了是他们看起来更像C++和Java的静态对象而已。
*
* 前面的for/in循环实际上是对数组的操作。
*
* 我们通常意义说的数组是将任何值和非负整数关联在一起的数据结构。
*
* 数组实际上是一个具有额外功能层的对象。如var a = new Array();window.alert(typeof a);输出Object。
*/
/**
* 13. Object类的属性和方法
* constructor属性表示初始化该对象的构造函数。因此,可以使用该属性来判断对象的类型。
*/
function A(){return "aaaaaaaaa"};
var a = new A();
window.alert(a.constructor); //输出的是A的函数定义
window.alert(a.constructor==A); //结果是true
window.alert(a.constructor()); //输出aaaaaaaaaa
/**
* toString()方法没有任何实际参数,它返回的是一个字符串,该字符串代表了调用它的对象的类型或值。当javascript需要将一个对象转化成字符串时就调用这个对象的toString方法。
* 例如,当用运算符"+"把一个字符串和一个对象连接到一起时,或者把一个对象传递给alert()或document.write()方法时,就会调用toString()方法。
*/
分享到:
相关推荐
在JavaScript中,我们可以使用内置的`JSON.stringify()`方法将JavaScript对象转换为JSON字符串。 ### JSON.stringify()方法 `JSON.stringify()`是JavaScript中的全局函数,用于将JavaScript值转换为JSON字符串。它...
这个项目专注于使用纯JavaScript来实现JSON与JavaScript对象之间的转换,这对于数据传输、存储以及在前端和后端之间进行通信至关重要。 首先,我们需要理解JSON的基本结构。JSON是一种文本格式,主要由键值对组成,...
JavaScript对象是JS编程中的核心概念,它是一种数据结构,用于存储和组织数据。在JavaScript中,一切都是对象,包括基本类型如字符串、数字和布尔值,它们都有对应的包装对象。理解JavaScript对象模型对于深入学习和...
本文主要关注如何将JSON字符串转换为JavaScript对象。 1. **JSON.stringify() 和 JSON.parse()** `JSON.stringify()` 是JavaScript提供的一个内置函数,用于将JavaScript对象转换为JSON字符串。这在需要在网络间...
10. **JSON对象**:`JSON`对象提供了`parse()`和`stringify()`两个方法,分别用于将JSON字符串解析成JavaScript对象,以及将JavaScript对象转换成JSON字符串。 11. **Map和Set对象**:ES6引入了`Map`和`Set`,它们...
### JavaScript对象、原型、属性、构造函数、扩展、JSON #### JavaScript对象类型 JavaScript是一种广泛使用的脚本语言,尤其在Web开发中占据了重要的地位。它支持多种对象类型,包括内部对象、基于类的对象以及...
在JavaScript中,可以使用`JSON.parse()`方法将一个JSON格式的字符串转换为JavaScript对象。这个方法接收一个JSON字符串作为参数,返回的是解析后的JavaScript对象。例如: ```javascript let jsonString = '{"name...
标题“json与对象互转,json数组与对象数组互转”涉及到的是如何在JavaScript中将JSON字符串和JavaScript对象之间进行转换,以及JSON数组和JavaScript对象数组之间的转换。在JavaScript中,有内置的全局函数`JSON....
例如,如果你有一个JSON字符串`'{"name": "John", "age": 30}'`,`JSON.parse()`可以将其转换为一个JavaScript对象`{name: "John", age: 30}`。这样,你就可以通过`.name`或`.age`来访问这些属性。 2. `JSON....
JavaScript对象是编程语言的核心组成部分,尤其在Web开发中扮演着至关重要的角色。"JavaScript对象参考手册"涵盖了这一主题的广泛内容,旨在为开发者提供全面、深入的理解和实用指南。手册分为20个章节,不仅涉及...
- JSON全称是JavaScript对象表示法,它是一种数据格式,用于存储和交换文本信息。 - JSON与XML类似,但比XML更简洁、解析速度更快,并且占用的存储空间更小。 - JSON可以被各种编程语言的JSON解析器和库所支持,...
JSON 转换是指将 JSON 数据与其他数据格式之间的相互转换,包括将 JSON 字符串转换为 JavaScript 对象、将 JavaScript 对象转换为 JSON 字符串等。 将 JavaScript 对象转换为 JSON 字符串 在将 JavaScript 对象...
在Web开发中,经常需要在原生JavaScript对象(即DOM对象)与jQuery对象之间进行转换,以利用jQuery提供的丰富方法和原生JavaScript对象的功能。本文将详细介绍如何在这两种对象之间进行转换,以及在转换过程中需要...
面向对象编程(Object-Oriented Programming,OOP)是编程的一种重要范式,JavaScript也完全支持这一特性,尽管它并非一种传统的静态类型语言。这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在...
第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 JavaScript对象.rar第8节 ...
在JavaScript中,JSON字符串与JavaScript对象之间可以方便地进行转换,这对于数据传输和存储至关重要。本篇文章将深入探讨JSON字符串与JS对象之间的转换方法。 1. `eval` 函数转换 `eval()` 是JavaScript中的一个...
1. JSON对象和JavaScript对象的关系:JSON格式实际上是对JavaScript对象的一种序列化表示。一个有效的JSON字符串可以被JavaScript解析为一个对象,同样,一个JavaScript对象也可以被转换为JSON字符串。 2. JSON的...
在JavaScript中,JSON数据可以直接被解析为JavaScript对象,或者将JavaScript对象转换为JSON字符串进行传输。这是因为JSON的语法结构与JavaScript的对象字面量和数组非常相似。例如,一个JSON对象可能看起来像这样:...
2. **字符串与JSON对象之间的转化**:JavaScript提供了两个内置函数来实现这种转化:`JSON.stringify()`用于将JavaScript对象转换为JSON字符串,`JSON.parse()`用于将JSON字符串转换回JavaScript对象。 **描述中的...