javascript也是面向对象的语言。
通常var a = {} 对象用大括号表示。
大括号中可以包含
属性 a:1,
方法 tostring:function(){alert("string")},
数组 array:[1,2,3,4,5],
其他对象 b:{c:"fff",d:"ggg"}。
一、由一对大括号括起来
var
emptyObj
=
{};
var
myObj
=
{
'
id
'
:
1
,
//
属性名用引号括起来,属性间由逗号隔开
'
name
'
:
'
myName
'
};
//
var m = new myObj(); //不支持
不知你注意到对象都是用 var 声明的没有,像上面的代码,就只是简单的声明一个对象,它只有一份拷贝,你不能像实例化类对象一样对它采用new操作,像上面代码的注释部分。这样就极大的限制了对象的重用,除非你建立的对象只需要一份拷贝,否则考虑用其他方法建立对象。
下面一起看看如何访问对象的属性和方法。
var
myObj
=
{
'
id
'
:
1
,
'
fun
'
:
function
() {
document.writeln(
this
.id
+
'
-
'
+
this
.name);
//
以"对象.属性"方式访问
},
'
name
'
:
'
myObj
'
,
'
fun1
'
:
function
() {
document.writeln(
this
[
'
id
'
]
+
'
+
'
+
this
[
'
name
'
]);
//
以集合方式访问
}
};
myObj.fun();
myObj.fun1();
//
结果
//
1-myObj 1+myObj
二、用 function 关键字模拟 class
function
myClass() {
this
.id
=
5
;
this
.name
=
'
myclass
'
;
this
.getName
=
function
() {
return
this
.name;
}
}
var
my
=
new
myClass();
alert(my.id);
alert(my.getName());
//
结果
//
5
//
myclass
三、在函数体中创建一个对象,声明其属性再返回
在函数体中创建对象可利用第一点的方法,或先 new Object(); 再为各属性赋值。
不过用这种方式创建的对象在VS2008 SP1中是没有智能提示的。
function
myClass() {
var
obj
=
{
'
id
'
:
2
,
'
name
'
:
'
myclass
'
};
return
obj;
}
function
_myClass() {
var
obj
=
new
Object();
obj.id
=
1
;
obj.name
=
'
_myclass
'
;
return
obj;
}
var
my
=
new
myClass();
var
_my
=
new
_myClass();
alert(my.id);
alert(my.name);
alert(_my.id);
alert(_my.name);
//
结果
//
2
//
myclass
//
1
//
_myclass
验证以上创建js对象效果的一个验证demo(用ext的onReady做的)
// JavaScript Document
Ext.onReady(function(){
alert("fff");
var one = new Object(testclass);
var two = new Object(testclass);
one.a = 2;
alert(two.a);
var three = new myclass();
var four = new myclass();
three.id = 1;
alert(four.id);
var five = new mySecClass();
var six = new mySecClass();
var seven = new myThirdClass();
var eight = new myThirdClass();
five.value = 10;
alert(six.value);
seven.value = 10;
alert(eight.value);
});
var testclass = {
a:1,
b:'dirk',
tostring : function(){
alert("fffeee");
},
array:[1,2,3,4,5]
}
function myclass(){
this.id = 5;
this.name = 'myclass';
this.getName = function() {
return this.name;
}
}
function mySecClass()
{
var a = Object();
a.value = 1;
return a;
}
function myThirdClass()
{
var a ={
value:1,
tostring:function()
{
alert("mytridclass");}
}
return a;
}
验证得出第一种方法,构建的是一个对象,改变任何原型或某个对象数据,都会影响其他对象数据。
其他两种方法实例的对象,当改变原型或某个对象,不会影响其他对象。