`
silentJesse
  • 浏览: 107474 次
  • 性别: Icon_minigender_1
  • 来自: 福建厦门
社区版块
存档分类
最新评论

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、原型链继承过来的属性
3、在Function对象定义的{} 体内与this绑定的属性
4、为对象(不管是普通对象还是Function对象)添加属性
请先看一下以下的这个例子:
  var life = {};
    for(life.age = 1; life.age <= 3; life.age++)
    {
        switch(life.age)
        {
            case 1: life.body = "卵细胞";
                    life.say = function(){alert(this.age+this.body)};
                    break;
            case 2: life.tail = "尾巴";
                    life.gill = "腮";
                    life.body = "蝌蚪";
                    life.say = function(){alert(this.age+this.body+"-"+this.tail+","+this.gill)};
                    break;
            case 3: delete life.tail;
                    delete life.gill;
                    life.legs = "四条腿";
                    life.lung = "肺";
                    life.body = "青蛙";
                    life.say = function(){alert(this.age+this.body+"-"+this.legs+","+this.lung)};
                    break;
        };
        life.say();
    };

从这个例子中可以看到吧..一个对象其属性是可以动态的添加和删除的
这段JavaScript程序一开始产生了一个生命对象life,life诞生时只是一个光溜溜的对象,没有任何属性和方法。在第一次生命过程中,它有了一个身体属性body,并有了一个say方法,看起来是一个“卵细胞”。在第二次生命过程中,它又长出了“尾巴”和“腮”,有了tail和gill属性,显然它是一个“蝌蚪”。在第三次生命过程中,它的tail和gill属性消失了,但又长出了“四条腿”和“肺”,有了legs和lung属性,从而最终变成了“青蛙”。如果,你的想像力丰富的话,或许还能让它变成英俊的“王子”,娶个美丽的“公主”什么的。

不过,在看完这段程序之后,请你思考一个问题:"我们一定需要类吗?"
 
还记得儿时那个“小蝌蚪找妈妈”的童话吗?也许就在昨天晚,你的孩子刚好是在这个美丽的童话中进入梦乡的吧。可爱的小蝌蚪也就是在其自身类型不断演化过程中,逐渐变成了和妈妈一样的“类”,从而找到了自己的妈妈。这个童话故事中蕴含的编程哲理就是:对象的“类”是从无到有,又不断演化,最终又消失于无形之中的...

    “类”,的确可以帮助我们理解复杂的现实世界,这纷乱的现实世界也的确需要进行分类。但如果我们的思想被“类”束缚住了,“类”也就变成了“累”。想象一下,如果一个生命对象开始的时就被规定了固定的“类”,那么它还能演化吗?蝌蚪还能变成青蛙吗?还可以给孩子们讲小蝌蚪找妈妈的故事吗?

    所以,JavaScript中没有“类”,类已化于无形,与对象融为一体。正是由于放下了“类”这个概念,JavaScript的对象才有了其他编程语言所没有的活力。

    如果,此时你的内心深处开始有所感悟,那么你已经逐渐开始理解JavaScript的禅机了



五、其他特性
1.继承
分享到:
评论

相关推荐

    JavaScript_高级编程

    **JavaScript**是一种广泛使用的脚本语言,它基于对象和事件驱动,并具备高度的安全性。这种语言最初被设计用于与HTML结合,以增强网页的交互性和动态性。JavaScript的使用不仅限于浏览器环境,随着Node.js的出现,...

    javascript从入门到精通

    详细探讨Window对象的属性与方法,包括创建和关闭窗口的技巧,理解窗口对象是开发交互式网页不可或缺的一部分。 第5章 document对象 将深入介绍document对象的属性和方法,这是操作网页内容的重要接口。 第6章 ...

    悟透JavaScript

    在JavaScript中,对象的创建并不依赖于类,而是直接通过对象字面量或构造函数实现,这使得JavaScript具有很高的灵活性。同时,JavaScript的原型链机制使得对象可以继承和共享属性,进一步强化了对象的复用和扩展。 ...

    史上最强,javascript深入学习文档,令你震惊。瞬间领悟真谛。

    这种独特的设计使得JavaScript在实现面向对象编程的同时,保持了轻量级和灵活性,但也增加了初学者理解和使用语言的难度。理解函数在JavaScript中的双重角色,对于深入掌握这门语言至关重要。 总之,JavaScript作为...

    2021-2022计算机二级等级考试试题及答案No.16182.docx

    16. ASP.NET特性:ASP.NET是基于.NET框架的,采用代码分离技术和面向对象编程,执行效率相对较高,但不使用JavaScript作为编程语言,而是支持多种.NET兼容的语言。 17. 主键规则:主键是表中唯一标识记录的字段,不...

    xytree javascript控件

    源码分析可以帮助我们学习如何构建和维护复杂的JavaScript对象和事件处理。示例则演示了控件的常见用法,包括基本配置、交互操作和高级功能的实现。 **五、应用场景** XYTree控件适用于多种场景,例如: 1. **...

    php开发中最常用的英语单词.docx

    29. **Attribute**: 描述对象性质的特性或属性。 30. **Audio**: 与声音处理相关的编程,如播放、录制等。 31. **Authorization**: 授权,允许或拒绝用户访问资源的控制。 32. **Background**: 在后台运行的任务...

    悟透 javascript

    - **使用场景**:创建自定义对象、实现面向对象编程特性。 #### 结论 JavaScript通过对数据和代码的基本元素进行简化和统一,不仅降低了学习难度,也为开发者提供了灵活且强大的编程工具。无论是初学者还是经验...

    2021-2022计算机二级等级考试试题及答案No.9388.docx

    4. **控件属性设置**:若要防止用户将光标置于控件之上,应将控件的`Enabled`属性设置为`False`,这样控件将变为禁用状态。 5. **构造函数**:构造函数是类的一个特殊方法,用于初始化新创建的对象,其名称可以与...

    2021-2022计算机二级等级考试试题及答案No.10703.docx

    12. 不能构成循环的语句:switch语句不能单独构成循环,它用于选择性地执行一段代码。 13. C语言循环输出:给定的C程序会输出14,因为循环结束时,x为5,且指针p指向数组的第二个元素,所以累加计算后输出14。 14....

    2021-2022计算机二级等级考试试题及答案No.10409.docx

    - 除了使用内容提示向导创建幻灯片外,还可以通过多种其他方法创建新幻灯片,如直接添加新幻灯片、复制已有幻灯片等。 ### 15. 数据表的存储结构 - 根据题目提供的字段类型和长度计算,每条记录占100个字节的空间,...

    2021-2022计算机二级等级考试试题及答案No.19525.docx

    以上是计算机二级等级考试涉及的知识点详解,涵盖了 PowerPoint 操作、Java 线程、SQL 查询、数据类型、多态性、硬件标准、数据库概念、计算机网络、编程语言特性、HTML/CSS、数据库设计、JavaScript、计算机历史...

    2021-2022计算机二级等级考试试题及答案No.14755.docx

    20. ASP.NET特性:ASP.NET依赖.NET框架,支持代码分离和面向对象编程,但不使用JavaScript作为主要编程语言,而是采用更高效的.NET语言。 21. 顺序查找效率:在最坏情况下,顺序查找64个元素需要比较64次。 22. ...

    2021-2022计算机二级等级考试试题及答案No.18992.docx

    8. 面向对象特性:对象的基本特点是分类性(继承)、封装、多态性和唯一标识。一致性不是面向对象的基本特点。 9. SQL的BETWEEN操作符:BETWEEN用于选取介于两个值之间的数据,与`工资 &gt;=1200 AND 工资 等价。 10....

    2021-2022计算机二级等级考试试题及答案No.2370.docx

    10. 封装原则:私有方法是类内部的方法,不对外公开,因此不会产生覆盖(重写)现象,这是面向对象编程中的封装特性。 11. JavaScript插入位置:在HTML页面中,JavaScript代码可以插入到`&lt;body&gt;`和`&lt;head&gt;`标签内,...

    网页设计与制作试题及答案.pdf

    - JavaScript的特性,如它是面向对象的、由SUN公司开发,以及它的安全性。 - DHTML的优点,如动态样式、动态定位和动态内容。 - CSS中的BOX模型属性,包括margin、padding、border和content。 这些知识点构成了网页...

    2021-2022计算机二级等级考试试题及答案No.12438.docx

    【计算机二级考试题】知识点详解: ...包括SQL语句、软件系统分类、Excel图表、Java类库、CSS语法、JavaScript事件处理、程序设计语言的发展、异常处理、Windows操作、URI概念、数据库管理、面向对象编程等。

Global site tag (gtag.js) - Google Analytics