js----对象的创建

时间:2023-03-09 02:08:08
js----对象的创建

js创建对象的三种方法

在介绍之前一定要弄清楚一个概念,比如var a = new Object(); 这里的a并不是一个对象,而是一个对象的实例。

一、用Json创造

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

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

二、用内置对象创造

内置的有Array、String、Object等等

 var a = new Object();
 a.name = 'Nic';
 a.age = 16;

 var b = a;//b和a同时引用一个对象
 b.name;//Nic
 b.age;

三、自定义对象

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

<1>全用this

 function A(name ,age) {
     this.name = name;
     this.age = age;
     this.fun = function (){
         alert('fun');
     };
 }
 var a = new A("Nic",16);
 a.name;//Nic
 a.age;
 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(原型)

 function A(name ,age) {
     this.name = name;
     this.age = age;
 } 

 A.prototype.fun = function (){
     alert('fun');
 };
 var a = new A("Nic",16);
 a.name;//Nic
 a.age;
 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

有什么意见欢迎交流。