日期:2014-05-16  浏览次数:20457 次

javascript之对象的种类、构成.使用、创建、属性及其他特性
参考了leadzen的blog:
http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html
一、对象的种类
有两类:
1.非Function对象,也可以说是非function实体,我们将它称为普通对象吧
2.Function对象,也可以称之为function实体
那么Function对象和普通对象有什么区别呢?
答案是:Function对象可以像普通对象一样的被使用,当加上括号和参数时也可以当成函数来使用,当与new结合使用时可以生成普通对象

二、对象的构成.使用
(1)javascript的对象是由属性和Function对象属性构成的
  
(2)引用对象中的属性的方式和java是一样的,也是通过点(.)操作符来引用的

三、对象的创建
我们现在开始来阐述javascript的对象创建.共有4种方式.
1、json(JavaScript Object Notation)形式创建对象.这种形式适用于灵活性强的地方
例子1
 <html>
<head>
   <title>generate object --gson form</title>
   <script type = "text/javascript">
     //定义对象tester,通过json的形式
      var tester = {
           //普通属性
           attrB:true,
           //Function对象属性
           action:function(){alert("hello world");}
      };
      
   </script>
</head>

<body>
    <script type = "text/javascript">
         //使用对象tester
         alert(tester.attrB);
         tester.action();
    </script>
</body>
</html>

这种方式通过key--value来定义对象及其对象属性
那么这些key均为该对象的属性
在他定义完为止,事实上他还拥有从其原型链继承过来的属性
但是小心,他访问不了prototype这个属性
关于原型链,我们后续会说到的

例如子象的属性tester对象在定义完成的时候就只有attrB和action两个属性,还有从其原型链继承过来的属性

2、当遇到json形式的字符串时,可以通过使用eval函数这个强大的数码转换引擎
  得到一个JavaScript内存对象
  那么这个对象他拥有哪些属性呢?
  (1)在字符串内部定义的key属性
  (2)通过原型链继承过来的属性
  (3)后续添加的属性


3、通过function定义
   或者new Function(......)
   这两种方式生成Function对象(也称之为function实体)
   哪些是他的属性
 
   刚定义完时,Function对象的具有从其原型连继承过来的属性,没有其他属性 
 

   (1)prototype(这个属性在普通对象中是没有的)
     在JavaScript中所有对象的原型引用。是JavaScript实现对象继承的主要手段
     关于prototype请参考http://silentjesse.iteye.com/blog/981189
   (2)toString
      Function对象内部方法,如果是自定义Function,
      则返回Function对象的完整定义,反之返回以下格式的字符串:
    
     Function functionname( ) { [native code] }
     

     例如:
<html>
<head>
   <title>Function object</title>
   <script type = "text/javascript">
     var fun = function(){
	var str = "hello,world";
	alert(fun.caller);
	this.attrI = 123;
     }

     var fun2 = new Function("alert(\"hello,world\");")
     
   </script>
</head>

<body>
    <script type = "text/javascript">
    	alert(fun.toString());//输出:function () {var str = "hello,world";alert(fun.caller);this.attrI = 123;}
	alert(fun2.toString());//输出:function anonymous() {alert("hello,world");}
        alert(Function.toString());//输出:function Function() {[native code]}
    </script>
</body>
</html>

  
    (3)constructor,表示当前对象的构造方法
      也是实现对象继承的主要手段,通过该属性可以有效地区别当前对象的构造方法。
    (4)valueOf,同toString类似
    如果是自定义Function则返回Function对象的完整定义,反之返回相应格式的字符串
    (5)apply
    (6)call
  如果还想要其他属性则可以像普通对象一样动态的添加,后续会详细说明的


4、通过Function对象(function实体)来new来生成一个普通对象
   这个普通的对象拥有哪些属性呢?
   目前我所知道的是
   (1)在Function对象定义的{} 体内与this绑定的属性
   (2)原型链继承过来的属性
   (3)定义后再添加的属性

总结:方式1和方式2其实类似于
var obj = new Object;
obj.attr1 = "1";
obj.attr2 = "2";

也就是说先用ObjectFunction对象new了一个普通对象,然后再往这个对象中添加属性

四、对象的属性
从上面的"对象的创建",我们可以得出对象的属性来源共有4种
1、定义时自定义的属性
2、原型链继承过来的