JavaScript面向对象编程

本文介绍了JavaScript中对象的六种创建方法,包括使用new操作符、对象直接量、构造函数、原型方式等,并提供了详细的示例代码。

 JavaScript复合数据类型一:对象
对象(object),(其实Array,function是object类型中的特例)
    JavaScript的对象有两种解释:
      1.对象是将多个数据值集中在一个单元中,而且允许使用名字来存取这些值;
      2.是表示的是已命名的值的无序集合;每个属性都有自己的名字和值。存储在对象中的已命名的值既可以是数字和字符串这样的原始值,也可以是对象;
      3.表示的是有编号的值的有序集合---数组(Array)。
      对象是已命名的数据集合,数据通常作为对象的属性来引用。
   1。JavaScript被称为是“基于对象的” ,而不是面向对象的---有对象的概念: 数据和操作的封装, 但没有继承的概念。
   2。从定义的角度看, JavaScript程序中有两种对象
       a.JavaScript提供的内置对象 (built-in object)
       --文档对象,HTML文档及其显示环境相联的对象, 例如window, document
       --核心语言对象(全局对象)
          字符串对象(String)
          数学对象(Math)
        日期对象(Date)
        数组对象(Array)
     b.程序员自定义的对象
   3。一个对象是一个由变量、其他对象或方法组成的一个集合.
    --在一个对象中包含的其他对象和变量被称为特性 (property)
    --在一个对象内的函数(function)称为这个对象的方法( method)
    --在一个特定的对象中的一些特性的序列称为数组, 例如document对象中的image[].
    --多维数组是由含有数组特性的对象数组构造的.
    对象的属性:可以是任何类型的数据,包括数组,函数以及其他的对象。
     对象的方法:如果一个函数值是存储在某个对象的属性中的,那么那个函数通常被称为方法,属性名也就变成了方法名。
     构造函数(constructor function):对象是通过调用特殊的构造函数创建的。
     对象的初始化:
     例如var a = image.width;
 ===================================================
 JavaScript对象创建的几种方法
 1.最简单的就是用new操作符创建对象:
   var o =new object();  //创建一个空对象
   <script language="javascript" type="text/javascript">
   <!--
        person = new Object()
        person.name = "Tim Scarfe"
        person.height = "6Ft"
        person.run = function(){
            this.state = "running"
            this.speed = "4ms^-1"
        }
   //-->
   </script>
   我们在这个例子里定义了person这个对象,然后加入了它的属性和方法.在这个例子里,自定义的方法里有两个属性.
2.创建对象直接量:
     var cricle={x:0,y:0,radius:2}
     var homer={
            name:"Homer Simpson",
            age:34,
                married:true,
                email:"zzy@163.com"
        }

3.用文字记号(JSLN/JSON)创建对象:
   JSLN:JavaScript Literal Notation(文字记号)
   JSON:JavaScript Object Notation(对象记号)
   var 对象名 = {
        变量1: 变量1的值,
        变量1: 变量1的值,
        ……,
        函数1: function() {
            函数体
        },
        函数2: function() {
            函数体
        },
        ……
   };
   格式说明:
        -大括号内直接填写变量或者函数;
        -对象的内容与值以冒号分隔,成对出现;
        -包含的变量或者函数之间以逗号分隔;
        -函数需要写在function(){}的大括号之内。
   例子:
   var对象名 = {
        name: “张三”,
        age: 20,
        eat: function() {
            alert(‘我要吃饭’);
        },

        sleep: function() {
            alert(‘我要睡觉’);
        }
   };   
   <script language="javascript" type="text/javascript">
   <!--
                                // Object Literals
        timObject = {
            property1 : "Hello",
            property2 : "MmmMMm",
            property3 : ["mmm", 2, 3, 6, "kkk"],
            method1 : function(){alert("Method had been called" + this.property1)}
        };
        timObject.method1();
        alert(timObject.property3[2])           // will yield 3
        var circle = { x : 0, y : 0, radius: 2 }   // another example
                                // nesting is no problem.
        var rectangle = {
        upperLeft : { x : 2, y : 2 },
        lowerRight : { x : 4, y : 4}
        }
        alert(rectangle.upperLeft.x)           // will yield 2
   //-->
   </script>
   用文字记号也可以创建对象,但要javascript 1.2以上版本.它的创建形式是多样的.
   文字记号可是是数组,也可以是任意的javascript表达式或值.
   用 new 操作符或文字记号创建一个自定义对象都是简单的,也是符合逻辑的.
   但它最大的缺点就是结果不可复用.也不能很容易的用不同的版本初始化创建对象.
   例如上面的第一个例子,如果 person 的 name 不是 "Tim Scarfe",那样我们不得不重新定义整个对象,仅仅为了适应它的一点点改变.
4.用function(对象构造器/函数)方式创建对象:
   function data() {
        this.变量1=变量1的值;
        this.变量2=变量2的值;
        ……;
        this.函数1= function() {
            函数体
        };
        this.函数2= function() {
            函数体
        };
        ……;
   }

   格式说明:
        -其内的变量或者函数前必需写上this关键字;
        -对象的内容与值以等号分隔,成对出现;
        -包含的变量或者函数之间以分号分隔。
        -函数需要写在function(){}的大括号之内。
   在OOP的世界里,用先前的方法定义对象在许多场合都有限制.我们需要一种创建对象的方法,类型可以被多次使用而不用重新定义.对象在实例化时每次都可以按需分配不同的值.实现这个目标的标准方法是用对象构造器函数.
   在Javascript中,我们可以通过创建构造函数(对象构造器),赋予对象属性,并在合适的时候赋予方法。然后通过使用new 关键字来调用构造函数,从而创建一个新对象实例。
        一个对象构造器只不过是个有规则的javascript函数,它就象一个容器(定义参数,调用其他函数等等).它们两者所不同的是构造器函数是由 new 操作符调用的.(你将在下面的例子中看到).基于函数语法形式的对象定义,我们可以使它工作得最好.
   让我们用现实世界中的猫来举个例子. 猫的name和color是猫的属性.meeyow(猫叫)是它的一个方法.重要的是任何不同的猫都可能有不同的name和meeyow的叫声. 为了建立适应这些特征的对象类,我们将使用对象构造器.
   下面给出了使用构造函数的示例。

   例子1:
       function data() {
        this.name=“张三”;
        this.age=20;
        this.eat=function() {
            alert(‘我要吃饭’);
        };
        this.sleep=function() {
            alert(‘我要睡觉’);
        }
   }
   例子2:
   <script language="javascript" type="text/javascript">
   var myObj = new Object();           //创建没有属性的通用对象。
   var myDate = new Date(1949, 9, 1);       //创建一个 Date 对象。
   function Student(id,name,age){
            this.id = id;
            this.name = name;
            this.age = age;
   }
   var myStu = new Student(1,"chouchy",18);   //创建一个用户定义的对象Student。
   </script>
   例子3:
   <script language="javascript" type="text/javascript">
   <!--
   function cat(name) {
        this.name = name;
        this.talk = function() {
            alert( this.name + " say meeow!" )
        }
   }
   cat1 = new cat("felix")
   cat1.talk()           //alerts "felix says meeow!"
   cat2 = new cat("ginger")
   cat2.talk()           //alerts "ginger says meeow!"
   //-->
   </script>
   在这里,函数cat()是一个对象构造器,它的属性和方法在函数体里用this来定义,用对象构造器定义的对象用new来实例化.注意我们如何非常容易的定义多个cat 的实例.
   每一个都有自己的名字,这就是对象构造器带给我们的灵活性.构造器建立了对象的蓝图.并不是对象本身.
5.用原型方式创建对象:
   var 对象名 = {};
        对象名.prototype.变量1=变量1的值;
        对象名.prototype.变量2=变量2的值;
        ……;
        对象名.prototype.函数1= function() {
            函数体
        };
        对象名.prototype.函数2= function() {
            函数体
        };
        ……;

   格式说明:

        -初始对象体内可以不定义任何东西;
        -在要定义的变量前加“对象名.prototype.”的格式;
        -对象的内容与值以等号分隔,成对出现;
        -包含的变量或者函数之间以分号分隔,也可以省去分号。
        -函数需要写在function(){}的大括号之内。
   例子:
   var data = {};
        data.prototype. name =“张三”;
        data.prototype. age =20;
        data.prototype. eat = function() {
            alert(‘我要吃饭’);
        };
        data.prototype. sleep= function() {
            alert(‘我要睡觉’);
   };
   在原型里增加方法.在上面我们看到的例子里,对象的方法是在构造器里定义好的了.
   另外一种实现的途径是通过原型(prototype).xxx,原型是javascript继承的一种形式.
   我们可以为对象定义好后,再创造一个方法.原来所有对象的实例都将共享.
   在编写构造函数时,可以使用原型对象(它本身是所有构造函数的一个属性)的属性来创建属性和方法。原型属性和方法将
按引用复制给类中的每个对象,因此它们都具有相同的值。可以在一个对象中更改原型属性的值,新的值将覆盖默认值,但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。
   让我们来扩展最初的 cat 对象.增加一个改名的方法.用 prototype 的方式.
   <script language="javascript" type="text/javascript">
   <!--
   cat.prototype.changeName = function(name) {
        this.name = name;
   }
   firstCat = new cat("pursur")
   firstCat.changeName("Bill")
   firstCat.talk()       //alerts "Bill says meeow!"
   //-->
   </script>

   就象你所看到的.我们仅只用了 关键字 prototype 实现了在对象定义后马上增加了changeName方法.
   这个方法被所有的实例共享.
   用原型(prototype)重载javascript对象,原型在自定义对象和有选择性的重载对象上都可以工作.比如Date()或String这可

能是无止境的.

   下面给出了使用自定义构造函数Student的示例,注意 this 关键字的使用。

   Student.prototype.school = "SWNU";       //为Student对象增加了一个属性:school
   Student.prototype.study = studyMethod;       //为Student对象增加了一个方法:studyMethod
   function studyMethod(){
                            //实现方法:studyMethod
        alert("Good Good Study,Day Day Up!");
   }

   测试:
   alert(myStu.id+":"+myStu.name+":"+myStu.age);   //显示myStu对象的属性:id,name,age
   myStu.study;       //调用myStu的方法:studyMethod

   按照这个原则,可以给预定义的构造函数(都具有原型对象)定义附加属性和方法。


6.用create方式创建对象:

   该方式利用了Prototype JavaScript组件库。

   var 对象名 = Class.create();
   Object.extend(对象名.prototype, {
        变量1: 变量1的值,
        变量1: 变量1的值,
        ……,
        函数1: function() {
            函数体
        },
        函数2: function() {
            函数体
        },
        ……
   });

   格式说明:

        -对象的创建使用了Prototype库中的Class.create()函数;
        -对象的内容使用Prototype库中的Object.extend()函数来扩展;
        -被扩展的对象在传入Object.extend函数时一定要带上prototype,
        -扩展内容被大括号包含,其内与JSON方式的定义格式完全相同。

   例子:

           var data = Class.create();
   Object.extend(dta.prototype, {
        name: “张三”,
        age: 20,
        eat: function() {
            alert(‘我要吃饭’);
        },
        sleep: function() {
            alert(‘我要睡觉’);
        }

       });


7.其实,JS对象的定义还有其它的方式,你也可以用上面这几种进行组合定义,这显出了JS作为动态语言的自由性。

   JS对象的创建正规方法如下:var d1 = new Data();

   JS对象变量的引用方式有两种:

        a.点号方式引用,如,data.name。
        b.数组方式引用,如,data[‘name’]。

构造函数:

   在对象被创建的同时必须调用构造函数,用于初始化对象。
   如,var o = new Object();     //创建一个空对象,没有属性的对象

   JavaScript还支持内部构造函数,它以另一种简洁的方式初始化新创建的对象。
   如,构造函数Date()可以初始化一个表示日期和时间的对象:
   var now = new Date();     //当前的日期时间
   var new_year = new Date(2000,10,01); //表示2000年10月1日


属性的设置和查询

       var book=new object();
           book.title="测试";
          alert(book,title);
          属性是通过一个值赋给对象的一个新属性来创建它。虽然通常用关键字var来声明变量,但是声明对象属性不用。

          属性的枚举:for/in循环提供了一种遍历对象属性的方法
   function displayppName(obj)
        {
        var name="";
        for(var name in obj)
            name+=name+"/n"
        alert(name);
        }


JavaScript一些专用对象:Date,RegExp,Error
Date,
RegExp,
Error

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值