JavaScript 三种创建对象的方法


JavaScript中对象的创建有以下几种方式: 
(1)使用内置对象 
(2)使用JSON符号 
(3)自定义对象构造 
一、使用内置对象

JavaScript可用的内置对象可分为两种: 
1,JavaScript语言原生对象(语言级对象),如String、Object、Function等; 
2,JavaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。 
我们所说的使用内置对象,是指通过JavaScript语言原生对象的构造方法,实例化出一个新的对象。如: 
代码如下:
var str = new String("实例初始化String"); 
var str1 = "直接赋值的String"; 
var func = new Function("x","alert(x)");//示例初始化func 
var o = new Object();//示例初始化一个Object

二、使用JSON符号 
(i)何谓JSON ? 
JSON (JavaScript Object Notation)即JavaScript对象命名,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于及其解析和生成。它基于《JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999》的一个子集。JSON是完全独立于语言的文本格式,因此成为数据交换的理想格式。 
JSON作为JavaScript的一个自己,同时ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的语言都提供支持,使得JSON成为Ajax开发的首选方案。 
JSON有两种构建方式,一种是采用简单的“键/值对”的集合,在不同的语言中被理解为对象、记录、结构、字典、哈希表、有键列表,或者关联数组等,另一种采用有序的值列表,大部分语言把它理解为数组。 
常用的创建方式是第一种,即采用“键/值对”集合的形式。在这种形式下,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),“ ‘键/值‘ 对”之间使用“,”(逗号)分隔。 
JSON具有以下特点:(1)简单格式化的数据交换;(2)易于人们的读写习惯;(3)易于机器的分析和运行。 
在JavaScript中,JSON被理解为对象。通过字符串形式的JSON,数据可以很方便地解析成JavaScript独享,并进行数据的读取传递。通过JSON,在一定程度上客服了JavaScript对象无法作为参数系列化传递的问题。 
1,简单的JSON 
{name:"刘德华",age:"25",sex:"男"} 
2,JSON值的类型 
JSON的值可以是简单的数据类型,例如数字、浮点、字符等,也可以是数组及对象。例如以数组作为member键值的JSON: 
{member:[{name:"刘德华"},{name:"郭富城"},{name:"张学友"},{name:"黎明"}]} 

book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}], 
author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}] 

3,在JavaScript中使用JSON 
JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或者工具包,JavaScript默认将JSON当做一个对象处理。 
将对象传递给一个变量,例如: 
代码如下:
var somebooks = { 
book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}], 
author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}] 
}

JSON的每个“键”相当于对象的属性,例如访问book中的第一个条目,在JavaScript中,就可以简单地使用“somebooks.book[0].name”来获取“三国演义”这个值。 
我们不但可以将一个JSON字符串转化为对象,反过来将一个对象“编译”为一个JSON字符串,以方便JavaScript中的对象的传输。例如: 
代码如下:
var Animals = new Object(); 
Animals.name = "dog"; 
Animals.sex = "Male"; 
Animals.age = "2";

Animals对象无法被序列化传输,将Animals对象转化为JSON字符串,也就是“{name:"dog",sex:"Male",age:"2"}”。这样,把该JSON字符串作为HTTP请求的一个参数传递,从而达到序列化传输Animals对象的目的。 
(ii)JSON通过字符串形式来表达JavaScript的对象。如: 
代码如下:
var myObject = {nickname:"my girlfried",name:"big pig"};

JSON实际上充当了一种在JavaScript对象和字符串之间实现相互转换的协议。由于JSON的“外表”可以看成但村的字符串,因此JSON在JavaScript的对象传输方面可以起到一定的作用。例如把对象strObject转换成字符串后进行传输,在达到目的地后通过eval方法将其还原成对象: 
代码如下:
function test (o) 

alert (o.name) 

var strObject = ‘{nickname:"my girlfriend",name:"big pig"}‘; 
test (eval("(" + strObject + ")"));

三、自定义对象构造 
创建高级对象构造有两种方式:使用“this”关键字构造、使用原型prototype构造。如: 
代码如下:
//使用this关键字定义构造的上下文属性 
function Girl() 

this.name = "big pig"; 
this.age = 20; 
this.standing; 
this.bust; 
this.waist; 
this.hip; 

//使用prototype 
function Girl(){} 
Girl.prototype.name = "big pig"; 
Girl.prototype.age = 20; 
Girl.prototype.standing; 
Girl.prototype.bust; 
Girl.prototype.waist; 
Girl.prototype.hip; 
alert(new Girl().name);

上例中的两种定义在本质上没有区别,都是定义“Girl”对象的属性信息。“this”与“prototype”的区别主要在于属性访问的顺序。如: 
代码如下:
function Test() 

this.text = function() 

alert("defined by this"); 


Test.prototype.test = function() 

alert("defined by prototype"); 

var _o = new Test(); 
_o.test();//输出“defined by this”

当访问对象的属性或者方法是,将按照搜索原型链prototype chain的规则进行。首先查找自身的静态属性、方法,继而查找构造上下文的可访问属性、方法,最后查找构造的原型链。 
“this”与“prototype”定义的另一个不同点是属性的占用空间不同。使用“this”关键字,示例初始化时为每个实例开辟构造方法所包含的所有属性、方法所需的空间,而使用“prototype”定义,由于“prototype”实际上是指向父级的一种引用,仅仅是个数据的副本,因此在初始化及存储上都比“this”节约资源。

时间: 2024-08-10 04:17:57

JavaScript 三种创建对象的方法的相关文章

JavaScript 三种创建对象的方法2

1   var  person = new Object(); person.name = "zs"; person.age = 19; 2  function Persson(name ,age){ this.age = age; this.name = name; this.play = function(){ .... } } function test2(){ var p = new Person('zs',19); alert(p.name); } 3  使用Json语法创建

C++中三种创建对象的方法【转】

我们都知道C++中有三种创建对象的方法,如下: #include <iostream> using namespace std; class A { private: int n; public: A(int m):n(m) { } ~A(){} }; int main() { A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 delete c; return 0; } 第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者

javascript三种创建对象的方式

javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成员信息写到{}中,并赋值给一个变量,此时这个变量就是一个对象.例如:  var person = (name:'dongjc', work:function() {console.log('write coding')});   如果{}中为空,则将创建一个空对象:  var person = {}

JavaScript基础之创建对象的方法

ECMA-262把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript的对象想像成散列表:无非就是一组名值对,其中值可以是数据或函数. 创建对象的方式多种多样,理解和掌握每种创建对象的方法对于学会JavaScript这门语言是十分重要的. 一.使用Object构造函数 var person = new Object()

javascript 中九种创建对象的方式

javascript 中对象的简介: ECMA-262 把对象的定义为:"无序属性的集合,其属性可以包含基本值,对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正是因为这样,我们可以把 javascript 中的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. javascript 中九种创建对象的方式: 1.原生 Object 构造函数 2.对象字面量表示法 3.工厂模式 4.构造函数模式 5

三种纯CSS方法实现等高列

在这篇文章里, 我会介绍三种使用纯css的方式来实现等高列的方法.在网页布局中设置列等高是比较常见的, 所以写这篇文章就是要总结下一些优雅的纯CSS解决方案. 插图自己弄得,不喜莫喷 哈哈.. 下面介绍的三种方法都只用到了CSS , 不涉及jQuery.JavaScript计算实现的方法,所以我把它这篇文章标题设为:三种纯CSS方法实现等高列. 方法-1: 使用Margins, Paddings和 Overflow来实现 第一种方法使用margins, paddings和overflow来迫使列

javascript 三种数组复制方法的性能对比

javascript 三种数组复制方法的性能对比,对于webkit, 使用concat; 其他浏览器, 使用slice. 一. 三种数组复制方法 1. by slice var arr = [1, 2, 3], copyArr; copyArr = arr.slice(); 2. by concat var arr = [1, 2, 3], copyArr; copyArr = arr.concat(); 3. by loop var arr = [1, 2, 3], copyArr = [];

javascript 三种弹出对话框

第一种:alert()方法 第二种:confirm()方法 返回一个布尔值,根据返回的值可以执行相应操作. 第三种: prompt()方法 返回输入的消息,或者其默认值提示框经常用于提示用户在进入页面前输入某个值. 当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操作. 如果用户点击确认,那么返回值为输入的值. 如果用户点击取消,那么返回值为 null.

控制系统的三种经典分析方法

控制系统的三种经典分析方法 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路设计等硬件方面的知识和项目笔记,由于当时崇尚手写,没有进行电子录入,后来发现查阅起来比较零散且麻烦,而且不便随身携带.现将笔记中写字比较公正清晰且内容重要的部分通过扫描录入共享在我的博文中,以便有需要时随时上网查阅,同时希望能对有兴趣的读者有所帮助.内容不涉及实验室等利益,均是常规知识储备. 时域分析法 根轨迹法