我总算想通了,用JavaScript不一定要用类,不用类也可以做到面向对象。凭什么面向对象就一定要用类呢。类这种东西,纯粹是因为C++语言编译的时候需要知道数据的底层结构,才搞出来的。JavaScript的对象全是Hash表,根本不需要定义类,直接用就可以了。况且,绝大多数类,不用于容器的时候,都只用一次,如果只用一次,根本没有必要要一个new的语法,只有C++这种底层静态类型语言,都要放到编译前来确定类的数据排放结构什么的,才非要多此一举定义一个类,JavaScript根本不用定义,直接一个花括号搞定。还有继承,JavaScript去模拟继承更是吃饱了撑的,我以前就经常吃饱了撑的,干这些事情,现在想通了,继承就是一个重用机制嘛,C++这种静态类型的语言因为没有办法运行时定义属性函数什么的,指针也都是固定类型的,实在没办法,才不得不搞出一整套虚函数继承来,JavaScript都是一个花括号搞定,运行时完全可以轻松的生成各种你想要的对象,还不用考虑指针类型,何须继承?照例,同意我观点的,100字以上论述为什么我的观点正确的,有分;不同意我观点的,用500字以上论述为什么我的观点错误,也有分,灌水的,没分!

解决方案 »

  1.   

    路过
    **********************************************************
    MyCSDN - CSDN离线数据浏览工具。(恒金软件出品)
    可下载论坛文件、文档文章和全文搜索论坛数据以供离线浏览。支持签名回复。下载地址:
    http://nj.onlinedown.net/soft/6591.htmBlog:
    http://spaces.msn.com/members/kingesoft/
      

  2.   

    又一次路过**********************************************************MyCSDN - CSDN离线数据浏览工具。(恒金软件出品)可下载论坛文件、文档文章和全文搜索论坛数据以供离线浏览。支持签名回复。下载地址:http://nj.onlinedown.net/soft/6591.htmBlog:http://spaces.msn.com/members/kingesoft/
      

  3.   

    最后一次路过**********************************************************
    MyCSDN - CSDN离线数据浏览工具。(恒金软件出品)
    可下载论坛文件、文档文章和全文搜索论坛数据以供离线浏览。支持签名回复。
    下载地址:http://nj.onlinedown.net/soft/6591.htmBlog:
    http://spaces.msn.com/members/kingesoft/
      

  4.   

    javascript动态但运行效率不高
    c++之类的刚好相反.啥场合合适就用啥.
      

  5.   

    http://blog.csdn.net/lexchou/archive/2005/09/24/488983.aspx以前写的JS的OOP以及其他东西,呵呵
      

  6.   

    楼主好象又些情绪啊.好象对类很不满啊.
    不过我得为类说几句话,不管是C++得还是 javascript得
    楼主关于"类这种东西,纯粹是因为C++语言编译的时候需要知道数据的底层结构,才搞出来的"得说法第一听说,还挺新鲜得,我听说得说法不是这样,类是一种软件复用思想,也是一种软件工程得思想,其一个重要得目的就是要掩盖地层,或者不希望别人知道得东西.我就不明白类和数据得地层结构又什么关系,什么样得地层?简单得数据类型?数据得长度?数据再内存中得表示方法? 类本身就是一种数据结构,和地层又什么关系.
    javascript得实现我不懂了,但是什么是一个花括号搞定?花括号只是一个符号,不是函数,不是类,不是模块,怎么搞定?你要搞定时不是也得写函数,写类,写代码吗?花括号和类又有什么关系呢?
    javascript本身就是建筑再类得概念基础上得,它把整个网页看作一个 document对象,document下是一个html得结构树,树得每个节点都是对象. javascript得许多功能都再类里面,只有少数得全局函数.至于javascript得类是不是多余得,你可以看看csdn左边得论坛列标树,就是有javascript写得一个 treeview类实现得. 另外,类用一次两次和类本身有关系吗?类得关键是重用,至于怎样使用,和类有什么关系?!
    面向对象得思想是很先进也很有用得,不过,也没有人强迫所有得程序原都要是使用类,你不用别人有会如何你呀?
    至于javascript得继承我没有用过,我也没有什么可说得,但是,如果你不喜欢,不用就是了,何苦这么义愤填膺呢?
    最后我还想问问,指针和类又又什么关系,你爱用不用得.如果你不喜欢c++,大可以用java或者vb什么得.如果你得能力足够高,创造一个 C++得新品种,把类和指针统统干掉,那又有什么不可以呀/
    真是莫名其妙
      

  7.   

    其实楼上的几位没有明白我的意思。
    JavaScript中有类,主要是通过new运算符和prototype来做到的。继承,JavaScript中本来是没有,但是也可以通过new一个基类对象作为派生类的prototype来做到,但是会产生很多麻烦。最关键的一个麻烦就是所有函数都是虚函数,很难有办法像java那样用super调用基类函数,也没有C++的::运算符。还可能函数命名一个一不小心就覆盖了基类的函数。至于我说"类这种东西,纯粹是因为C++语言编译的时候需要知道数据的底层结构,才搞出来的",这里我是把类到他的具体实现上面了,C++的类的实现和C语言的结构一样,类的定义和结构的定义都是为了编译的时候知道每个成员的偏移量,汇编码就是ecx+4 , ecx+8这样。但javascript并不需要预先定义才能使用。
      

  8.   

    我觉得javascript比c++还难学.入门容易,学深难.要考虑很多问题,不同的浏览器,不同的版本.
      

  9.   

    我认为每种语言都有长处和短处,不能求全责备.而且像javascript这种脚本语言,发展才几年,很可能有不成熟或者设计失败得地方,楼主得观点也不是没有可取之处.我因为吧语言当作工具,从来没有认真思考过其完美性得问题.楼主有兴趣,可以给javascript改进改进,也显显中国程序员得水平和深度
      

  10.   

    呵呵,atry把这个帖子整理到我的地盘上去吧
      

  11.   

    昨天看到C#3.0的一些特性。
    http://dev.yesky.com/msdn/441/2194441.shtmlC#是强类型语言,但这些新特性,太像解释语言了,只不过和解释语言的区别在于这些语法都是交给编译时来处理的,而不是运行时。什么是OO?为什么要OO?这两个问题,问100个人就有100个答案,OO就一定要用类吗?在我看来类的定义只不过是对于静态类型语言,尤其是C++这种低级语言,要放到编译前来确定类的数据排放结构什么的,才需要定义一个类。对于这个,请看http://community.csdn.net/Expert/topic/4389/4389662.xml?temp=.6030084在.NET库中,大量使用静态函数,大家都知道,静态函数就是全局函数,OO不鼓励用全局函数,.NET的语法也不支持全局函数,就只好用静态函数了,这些静态函数,有的和某些特定的类关系紧密,比如string.Format就返回一个string对象,所以就把他划归到string类里面,这些做法的确有利于模块化。而另外一些静态函数,根本就是一个类里面全部成员都是静态的,比如System.Convert,这些函数,并没有一个相关的this指针。在我看来OO,就是按照“以数据为中心,代码为数据服务”的指导思想来组织编码,从而降低不同模块间的耦合度,最终目的是为了更好的控制程序。而以数据为中心,再加上处理这些数据的代码,这样的包装,就是一个对象。这就是面向对象的逻辑,只要符合这种逻辑,就是面向对象。任何语言都可以用这种逻辑来组织程序,所以,任何语言都可以面向对象,包括汇编。以不支持成员函数的C语言为例,可以写这样的代码:struct String
    {
        char * buff;
    };int String_get_Length(String* _this)
    {
       return strlen(_this->buf);
    }String* static_String_Create(int nBufferSize)
    {
       String * newString = (String*)malloc(sizeof(String));
       newString->buff = (char*)malloc(nBufferSize*sizeof(char));
       memset(newString->buff, '0', nBufferSize*sizeof(char));
    }void main()
    {
       String* myString = static_String_Create();
       String_get_Length(myString);
    }当然,这样的语法并不好看,但无疑C语言一样可以以OO的思想来设计程序。要实现OO,具体语法和底层实现方法上不同语言可能是不同的,C++的语法和C语言不同,但是它底层实现OO和上面的代码区别并不大,除了this指针是通过ecx来传而不是参数这一点小区别。而对于编译语言,由我上面说的,只要能围绕数据来组织代码,就是OO,并不一定要有一个类,也不一定要有继承。用hash表来做对象,这实现本身就不必先声明,就更不需要类了。