选择 JS OOP 实现方式,支持 Aptana IDE 的代码提示

阅读更多

直接写 JS 代码不需要 IDE 支持的牛人可跳过。。。

JS 在实现复杂的 RIA 组件时,如果没有 OOP 的支持会显得很麻烦,不利于代码重用,比如 Ext JS 的 Widget 里面就广泛用到了继承关系:Observable > Button > SplitButton = MenuButton,MooTools 中对接口的使用比较多。这 JS 代码越写越复杂,Aptana 对 JS 的代码提示支持,还是比较能提高生产效率的。

试用过 ExtJS、Prototype、MooTools、Base.js 等支持 OOP 比较好的框架,发现其 OOP 的实现方式都没有考虑到与 Aptana 的兼容性(YUI 代码太大了),就拿 Base 来举例

js 代码
  1. var Animal = Base.extend({   
  2.     constructor: function(name) {   
  3.         this.name = name;   
  4.     },   
  5.        
  6.     _eat: function() {},   
  7.        
  8.     _say: function(message) {}   
  9. });   
  10.   
  11. var Cat = Animal.extend({   
  12.     _eat: function(food) {}   
  13. });  

折腾半天,也没发现如何让 Aptana 提供代码提示。。。

Ext JS  的 OOP 实现方式比较传统,我喜欢这种风格,可是和 Aptana 的兼容性还是不够好,主要是 Ext.extend(subClass, superClass, overrides) 内部代码提示出不来,加以改造吧。

js 代码
  1. /**  
  2.  * @param {String} name  
  3.  */  
  4. function Aninmal(name) {}   
  5. Aninmal.prototype =    
  6. {   
  7.     /**  
  8.      * eat amount food  
  9.      * @param {Number} amount  
  10.      */  
  11.     _eat: function(amount) {},   
  12.   
  13.     /**  
  14.      * @param {String} message  
  15.      */    
  16.     _say: function(message) {}   
  17. }   
  18.   
  19. /**  
  20.  * @extends {Aninmal} 加上这句,Aptana就知道继承 Aninmal 的属性和方法  
  21.  * @param {Object} name  
  22.  */  
  23. function Cat(name) {}   
  24. Cat.prototype =    
  25. {   
  26.     /**  
  27.      * @param {Number} amount  
  28.      * @param {Boolean} isNotify  
  29.      */  
  30.     _eat: function(amount, isNotify) {}   
  31. }   
  32.   
  33. Ext.Class.extend(Cat, Aninmal, {});  // 伪代码,可以参考 Ext.extend,实现子类对父类的继承   
  34.   
  35. var obj = new Cat("");   
  36. // 对 obj 就可以用上代码提示了  


你可能感兴趣的:(OOP,Aptana,IDE,EXT,Mootools)