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
有什么意见欢迎交流。