最近在学习javascript时,碰到很多面向对象js的问题(.net)
请各位高手赐教 `-`
1.Object.extend(Element,{
        getWidth:function(elem)
           {
              //code
           }
}
)
extend是继承么?如果是继承是不是给Element添加新的方法?Object确切的是什么东西?Element(红色的)这个又是什么东东??2.Array.prototype.removeDuplicates =function(){//code}
Array不是对象么??怎么对象还可以象类一样给它添加方法???3.prototype是什么东东?有什么作用?用prototype给类定义方法属性,和不用prototype有什么区别呢??
一口气说了一堆,打字都都打了好久,望各位高手不要吝惜短短的几分钟,多多指教.
如果觉得分少了,另开帖给分.

解决方案 »

  1.   

    楼主不要参考这个代码
    1.这个代码明显是基于prototype.js库的
    prototype.js库封装了一系列方法,可以使javascript代码看起来更优美,更接近面向对象的编程习惯楼主要是想下载prototype.js库的话只需要搜索一下就行了2.javascript是通过prototype来实现继承的prototype声明了附加在对象原型上的方法
       Array本省并不包含removeDuplicates 方法
       但是通过Array.prototype.removeDuplicates =function(){}这样的声明可以将方法removeDuplicates 附加到Array的javascript原型上
        相当于扩展了Array的方法3.prototype主要是javascript原型定义的一种为原型对象附加方法的关键字
      通过prototype关键字可以为任意的对象原型附件任意多的方法,实现类型面向对象的封装和继承
      

  2.   

    function Table()//定义了一个Table对象,对象没有任何属性和方法
    {}Table.prototype.AddRow(row)//为Table对象附加了一个方法,方法名叫AddRow,可以接收一个参数,参数名叫row
    {}使用方法:var tb = new Table();//实例化一个Table对象
    tb.AddRow("row");//调用tb实例的AddRow方法
      

  3.   

    另外我还帮楼主找了一篇不错的文章,里面比我说的更具体http://www.huaid.cn/blogs/9/bb_1993.html
      

  4.   

    感谢brz97,4楼时你说到"将方法removeDuplicates 附加到Array的javascript原型上相当于扩展了Array的方法".
    看到这句恍惚明白了一点,刚才看了msdnWebCast的Ajax深入浅出,提到了prototype链,是不是就把removeDuplicates方法加到了Array的prototype中?
      

  5.   


    可以这样理解事实上就是为Array原型增加了一个removeDuplicates方法,Array对象的任何实例都可以调用这个方法
      

  6.   

    感谢brz97.
    越来越感觉人说的就是比书说的好啊.
    恍惚已经明白些了,但是好像又没明白.
      

  7.   

    楼主有没有看我给你找的那个链接啊,里面就是通过prototype定义类和定义对象的继承关系的
      

  8.   

    看了,
    但是一下思维转换不过来,怎么用funcation就定义类了,,
    现在知道是知道了,但是总觉得不舒服,,
    看的时候觉得懂了,,过一会又忘了,,应该写点代码,,
      

  9.   


    呵呵,确实一开始不太习惯还有一种方式啊var Ajax = new Object();//定义namespace : AjaxAjax.prototype=
    {
         initialize:function(){},//Ajax的方法1
         dispose:function(){}//Ajax的方法2
    }var ajax = new Ajax.initialize();//生成Ajax的对象这也是一种定义方式啊,呵呵javascript是很值得研究的
      

  10.   

    registerNameSpace()
    webcast上这么写过,,,注册命名空间