JavaScript面向对象编程笔记

时间:2022-12-20 13:53:54

JavaScript版本的问题:
在开发过程中经常会碰到一些版本问题,在看一些文章的时候经常没有说明一下运行的环境及相关的软件版本等,可能造成很大的误解。
目前常用的版本是JavaScript1.2,如  <SCRIPT LANGUAGE="JavaScript1.2"></script>,如果没有写版本号,默认按最高的版本运行。如:<SCRIPT LANGUAGE="JavaScript"></script>
还有两个版本是 <SCRIPT LANGUAGE="JavaScript1.0"></script>和<SCRIPT LANGUAGE="JavaScript1.1"></script>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> 脚本测试窗口 </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <SCRIPT LANGUAGE="JavaScript1.2">
  <!--
    var homer = {name:'adfsadf',age:34,married:true} //这种创建对象的方式只适用于1.1及以后的版本。
    function Rectangle(w,h)//构造函数
    {
        this.width = w;
        this.height = h;
        return null; //这行可以不写。(测试用)如果在1.0版本中,构造函数返回值后,后面的ret1就是null了,当取ret1.width的时候就会报错。
    }

    function Test(obj)
    {
        //delete homer.name;//在1.2版本中新增加的功能,可以完成把这个属性删除。以前的版本只能实现homer.name=null 的效果。
//        for(var i in homer)
//        {
//            alert(i);
//        }
        var ret1 = new Rectangle(11,12);

        alert("测试成功!"+ ret1.width + "|"+ ret1.height);
        var ret2 = new Rectangle(13,12);

        alert("测试成功!"+ ret2.width + "|"+ ret2.height);
    }
  //-->
  </SCRIPT>
 </HEAD>
 <BODY>
  <INPUT TYPE="button" name="btn1" value="测试" onclick="Test(this);">
 </BODY>
</HTML>


方法:

在1.0的时候只能这样定义对象的方法:
    function Rectangle(w,h)//构造函数
    {
        this.width = w;
        this.height = h;
        this.area = compute_area;//在1.0的时候只能这样写或者这样写@1
        return null; //这行可以不写。(测试用)如果在1.0版本中,构造函数返回值后,后面的ret1就是null了,当取ret1.width的时候就会报错。
    }

    function compute_area()
    {
        return this.width * this.height;
    }

    function Test(obj)
    {
       
        var ret1 = new Rectangle(11,12);
        ret1.area = compute_area; //在1.0的时候只能这样写或者这样写:查看@1
       
        alert("测试成功!"+ ret1.width + "|"+ ret1.height + "|"+ret1.area()+ "|"+ret1.area);
        var ret2 = new Rectangle(13,12);

        alert("测试成功!"+ ret2.width + "|"+ ret2.height);
    }
1.1以后引入了更好的方法(引入了原型对象的概念相当于继承类):  prototype属性可以设置为适当的对象。增加了以原型对象为基础的继承机制,具备了面向对象语言的三个特性(封装、继承、多态)所以说javascript也是一种面向对象的语言。只是不同于java和C++等以类为基础的继承机制。

Java中有一条常用的约定,那就是命名类时以大写字母开头,命名对象时以小写字母开头。JavaScript也可以沿用这一规则。定义类的时候第一个字母都用大写的字母,创建类的实例的时候第一个字母都是小写。