修改一下,生成html的那个函数忘了写id了,呵呵button.prototype.write=function(){  
     return  "<button  id=\"" + this.id + "\" style=\"width:"  +  this.width  +  ";height"  +  this.height  +  "\">"  +  this.caption  +  "</button>"  
};  

解决方案 »

  1.   

    呵呵!我觉得这个东西学下去没有前途的!
    你可以看看js.net
    也许下一版的浏览器就支持呢!
      

  2.   

    有前途没前途那是js的事,跟面向对象无关,js.net对oop的支持只有更紧密,更何况,下一代浏览器出来不定什么时候的事了,就算出来了,你做出来的产品的客户是否就在使用新版浏览器呢,开发B/S软件肯定是要用到javascript,怎么着最近几年都得用阿
      

  3.   

    一般对象的类中多数多数都把属性字段定义为private 类型 ,要想对这个类的对象属性字段进行读取或赋值必须使用get、set方法。
    对于this._text,this._top这些写法我认为:在this这个对象中有_text和_top属性字段。
      

  4.   

    1、如何创建函数对象的属性
    属性其实就是对象里的一个变量
    function otest(){
      this.name = "test";  //otest的name属性
    }
    2、如何创建函数对象的方法
    方法其实就是对象里引用的一个函数
    function otest(){  
      this.otherfunctio();  //otest的otherfunctio方法
    }
    3、如何创建函数对象的事件
    对于事件没多大了解
    4、this.xxx什么的我看别人写的都加了个_,比如this._text,this._top,是不是必须得加阿?
    _text只是变量名即属性名,不一定要加_
      

  5.   

    你可以看看我的专栏http://www.csdn.net/develop/author/NetAuthor/liuruhong/有两篇文章是讲述JavaScript OOP编程方面的,对于这个方面我应该还算了解一点。学习OOP的最好方式就是看看别人实现的代码,对于这点,如果你有精力的话,可以去看看
    http://www.i-see.net/bindows,那边的JavaScript代码是封装得比较好的,另外这段时间我何一个朋友合作写了《JavaScript的面向对象方式》,应该算比较全面的介绍JavaScript的OOP,不过不知道是在CSDN开发高手还是程序员中发表的,目前编辑还没有通知我
      

  6.   

    to 蓝色街灯,我就是看了bindows的那套东西才动心想学习javascript的oop编程的,以前真是没想到javascript可以这样用阿帖子我先不结呢,再等两天吧,看看还有没有指点,呵呵
      

  7.   

    Erik 是我最最佩服的Web开发的高手,说实话,我大部分的知识来自于他的代码还有就是MSDN和ECMA262文档。在应用方面,JavaScript太多的OOP封装是没有意义的,不过如果考虑提供和Bindows那样的Toolkit,那么你的OOP设计还有对于JavaScript OOP实现的机制确实必须了解的,这段日子我个人在和一个老大研究JavaScript的DesignPatterns,不是为了模式而实现模式,主要是考虑能否用那些设计的基本理论应用于Web Library的开发,讨论那些东西对于普通的web开发人员来说没有任何意义的,不过如果是做Library或者说framework的web开发人员,或许能够提供一点帮助,不过了,这个也只是我一相情愿的事情了,因为自己的无知,进展比较慢
      

  8.   

    js对于class的欠缺的确是个遗憾。下面是我写的一个简单的dog类:<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <script>
    function person(name,gender,age,dog){
      this.name=name;
      this.gender=gender;
      this.age=age;
      this.dog=dog;
      function person.prototype.setName(name){
        this.name=name;
      }
      function person.prototype.getName(){
        return this.name;
      }
      function person.prototype.setGender(gender){
        this.gender=gender;
      }
      function person.prototype.getGender(){
        return this.gender;
      }
      function person.prototype.setAge(age){
        this.age=age;
      }
      function person.prototype.getAge(){
        return this.age;
      }
      function person.prototype.speak(words){
        alert(words);
      }
      function person.prototype.getDog(){
        return this.dog;
      }
    }
    function dog(name,color,age,barksound){
      this.name=name;
      this.color=color;
      this.age=age;
      this.barksound=barksound;
      this.id=null;
      this.emotion=null;
      this.owner=null;
      function dog.prototype.setId(id){
        this.id=id;
      }
      function dog.prototype.getId(){
        return this.id;
      }
      function dog.prototype.setName(name){
        this.name=name;
      }
      function dog.prototype.getName(){
        return this.name;
      }
      function dog.prototype.setColor(color){
        this.color=color;
      }
      function dog.prototype.getColor(){
        return this.color;
      }
      function dog.prototype.setAge(age){
        this.age=age;
      }
      function dog.prototype.getAge(){
        return this.age;
      }
      function dog.prototype.setBarkSound(barksound){
        this.barksound=barksound;
      }
      function dog.prototype.getBarkSound(){
        return this.barksound;
      }
      function dog.prototype.setEmotion(emotion){
        this.emotion=emotion;
      }
      function dog.prototype.getEmotion(){
        return this.emotion;
      }
      function dog.prototype.setOwner(owner){
        this.owner=owner;
      }
      function dog.prototype.getOwner(){
        return this.owner;
      }
      function dog.prototype.bark(){
        alert(this.barksound);
      }
      function dog.prototype.callBark(){
        this.bark();
      }
    }
    function loadit(){
      var dog1=new dog("Jeck","red",1,"wangwang");
      myid.innerHTML="The dog's name is: "+dog1.getName();
      dog1.setId(1);
      dog1.setEmotion("happy");
      myid.innerHTML+="<br>Its emotion is: "+dog1.getEmotion();
      myid.innerHTML+="<br>Its id is: "+dog1.getId();
      dog1.setOwner(new person("Alice",false,17,dog1));
      myid.innerHTML+="<br>Its owner's name is: "+dog1.getOwner().getName();
      dog1.getOwner().speak("Hello, my dog's name is "+dog1.getOwner().getDog().getName());
      dog1.callBark();
      
    }
    </script>
    </head><body onload="loadit()">
    <p id="myid"></p>
    <p id="myid2"></p>
    </body></html>
      

  9.   

    //javascript和java差不多,一切都是对象。
    function Person() {
      this.userName="wsfx";  //属性一
      this.password="123456";  //属性二
      this.getPersonInfo=getPersonInfo;  //定义对象的方法
    }//注意,这个函数不能写在function A()的函数体内,不然会报错的。
    function getPersonInfo() {
      alert(this.userName);
      alert(this.password);
    }//下面是在使用Person对象的例子
    <script language="javascript">
      var p=new Person();
      p.getPersonInfo();
    </script>
    //一起进步!
      

  10.   

    还有一点不明白,我看bindows都有在函数定义中调用一些初始化函数,不知道怎么实现
    代码如下//调用
    var ss=new myClass();  //实现function myClass(){
        this.onchange=null;
        this.setEvent();
    }myClass.prototype.setEvent=function(){
       alert("ss")
    }运行到this.setEvent();
    提示出错阿
      

  11.   

    我的两篇文章应该提到这个方面的东西,就是关于Prototype关键字的实现问题
      

  12.   

    to  fastson()
    看了你的提问,代码应该没有问题,prototype关键字是对于Object的parent object起作用的,而你的myClass这个函数是一个典型的constructor(构造子或者构造过程),用来产生一个myClass的实例,这点你可以通过instanceof这个操作来判断。至于你的代码出现错误,我想可能是你其他的问题吧,认真调试一下,或者贴出完整的源代码,我来帮你看看到底什么问题。
      

  13.   

    to  fastson()别的问题不回答,就这个说一下,其他的看看我写过的东西,应该说过。
    4、this.xxx什么的我看别人写的都加了个_,比如this._text,this._top,是不是必须得加阿?
    this._text从Javascript来说同样是一个属性,就是说你可以确实调用的,不过作为WebLibrary的开发人员,最后的Document不会公布这个属性的,这个只是一个设计的规范问题罢了。this._text相当于载设计上认为只是内部方法自己调用的,所以通过_PropertyName这样的命名规范让别人好理解。一句话,不是必需的,只要通过this.xxx可以访问的,在你的instance中就绝对可以调用
      

  14.   

    结贴了,其他的人在这里结,蓝色街灯请到下面两个帖子接分http://expert.csdn.net/Expert/TopicView1.asp?id=2405674http://expert.csdn.net/Expert/TopicView1.asp?id=2405670