直接写 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 代码
- var Animal = Base.extend({
- constructor: function(name) {
- this.name = name;
- },
- _eat: function() {},
- _say: function(message) {}
- });
- var Cat = Animal.extend({
- _eat: function(food) {}
- });
折腾半天,也没发现如何让 Aptana 提供代码提示。。。
Ext JS 的 OOP 实现方式比较传统,我喜欢这种风格,可是和 Aptana 的兼容性还是不够好,主要是 Ext.extend(subClass, superClass, overrides) 内部代码提示出不来,加以改造吧。
js 代码
- /**
- * @param {String} name
- */
- function Aninmal(name) {}
- Aninmal.prototype =
- {
- /**
- * eat amount food
- * @param {Number} amount
- */
- _eat: function(amount) {},
- /**
- * @param {String} message
- */
- _say: function(message) {}
- }
- /**
- * @extends {Aninmal} 加上这句,Aptana就知道继承 Aninmal 的属性和方法
- * @param {Object} name
- */
- function Cat(name) {}
- Cat.prototype =
- {
- /**
- * @param {Number} amount
- * @param {Boolean} isNotify
- */
- _eat: function(amount, isNotify) {}
- }
- Ext.Class.extend(Cat, Aninmal, {}); // 伪代码,可以参考 Ext.extend,实现子类对父类的继承
- var obj = new Cat("");
- // 对 obj 就可以用上代码提示了