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;
}



验证得出第一种方法,构建的是一个对象,改变任何原型或某个对象数据,都会影响其他对象数据。



其他两种方法实例的对象,当改变原型或某个对象,不会影响其他对象。