你的位置:首页 > Java教程

[Java教程]js的对象的创建


原标题叫js的对象和this,我觉得不太严谨,因为本文没有详细讲this,只是提了一下,所以更名为js的对象的创建。以后会专门写一篇关于this的。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

先介绍js创建对象的三种方法

在介绍之前一定要弄清楚一个概念,比如var a = new Object(); 这里的a并不是一个对象,而是一个对象的引用,new Object();才是创建了一个对象并返回一个引用,a是一个变量储存的是对象的引用。

一、用Json创造

1 var a = {b:1,c:3};2 a.b;//13 a.c;//3

在这种形式下,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),“ ‘键/值' 对”之间使用“,”(逗号)分隔。

 

二、用内置对象创造

内置的有Array、String、Object等等

1 var a = new Object();2 a.name = 'Nic';3 a.age = 16;4 5 var b = a;//b和a同时引用一个对象6 b.name;//Nic7 b.age;//16

 

 

三、自定义对象

这个用的很普遍,因为Json有一个缺点就是只能创建一个对象,而自定义的话就如同一个模具,可以创建多个对象。(描述有点不准确)

<1>全用this

 1 function A(name ,age) { 2   this.name = name; 3   this.age = age; 4   this.fun = function (){ 5     alert('fun'); 6   }; 7 }  8 var a = new A("Nic",16); 9 a.name;//Nic10 a.age;//1611 a.fun();//弹出'fun'

这样创造对象的特点:写在一个构造函数中,函数中的属性用this.XX = XX;的形式,属性之间‘;(分号)’隔开,创建对象时用new,初始化构造函数。

 

为什么在function中加this?如果不加this呢?

当你var a = new A("Nic",16);时,A中的this指向a,如果不加this,那么a.name为undefined,特别注意的是如果你不用new,而是var a = A(.....);那么A中的this指向的是Window,“new出来的对象this指向属性和方法依托的对象,不new出来相当于直接调用一个函数,this指向Window。

 

为什么说自定义的话像一个模具可以创造多个不同对象呢?

是因为只要改变传入的参数,就可以改变对象。

 

<2>使用prototype(原型)

 1 function A(name ,age) { 2   this.name = name; 3   this.age = age; 4 }  5  6 A.prototype.fun = function (){ 7   alert('fun'); 8 }; 9 var a = new A("Nic",16);10 a.name;//Nic11 a.age;//1612 a.fun();//弹出'fun'

记住一句话,this的属性是私有的,而prototype的是共享的。在两个对象继承时会继承this,而不会继承prototype。

 

变量ab同时引用一个对象的时候,如果给a单独增加了一个方法a.sum();,那么b是不能调用该方法的。怎么才可以ab都能调用呢?那就给构造函数增加 一个prototype的sum方法时,变量ab都可以调用那个方法。可以这么想,构造器是一个爸爸,ab是他的儿子,爸爸有的东西儿子都可以有,但是大 儿子自己独有的东西小儿子是不会有的。

 

prototype这里说的不是很详细,想仔细了解的话可以看这里:http://www.cnblogs.com/mindsbook/archive/2009/09/19/javascriptYouMustKnowPrototype.html

有什么意见欢迎提~