[英]namespaces in javascript with code completion / content assist support in IDE's
[英]Oo javascript code completion in any IDE
你知道任何可以自动完成这种代码的IDE吗?
我这里有一个javascript类生成器:
(function() {
var core = {
bind : function(method, scope) {
if (!( method instanceof Function))
throw new TypeError("Function needed as method.");
if ( typeof (scope) != "object")
throw new TypeError("Object needed as scope.");
return function() {
return method.apply(scope, arguments);
};
},
require : function(source) {
if ( typeof (source) != "object" || !source)
throw new TypeError("Object needed as source.");
for (var property in source)
if (source.hasOwnProperty(property) && !this.prototype.hasOwnProperty(property))
this.prototype[property] = source[property];
},
override : function(source) {
if ( typeof (source) != "object" || !source)
throw new TypeError("Object needed as source.");
for (var property in source)
if (source.hasOwnProperty(property))
this.prototype[property] = source[property];
},
extend : function(source) {
var superClass = this;
var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {
superClass.apply(this, arguments);
};
newClass.superClass = superClass;
var superClone = function() {
};
superClone.prototype = superClass.prototype;
newClass.prototype = new superClone();
newClass.prototype.constructor = newClass;
if (source)
newClass.override(source);
return newClass;
}
};
core.require.call(Function, core);
Function.create = function (source){
var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {};
newClass.override(source);
return newClass;
};
})();
我需要这些示例类的代码完成(在注释中写):
//Function.prototype: bind, require, override, extend
//Function.create
var A = Function.create({ //offer Function.[create]
test: function (){
console.log("a");
}
});
//A is a Function instance
//A.prototype: test
var B = A.extend({ //offer A.[extend]
test: function (){
console.log("b");
},
test2: function (){
console.log("b2");
}
});
//B is a Function instance
//B.prototype inherits from A.prototype
//B.prototype.test overrides A.prototype.test
var F = Function.create({ //offer Function.[create]
getA: function (){
return new A();
},
getB: function (){
return new B();
}
});
//F is a Function instance
//F.prototype getA, getB returns A and B instances
var f = new F(); //offer [F]
//f inherits from F.prototype
var a = f.getA(); //offer f.[getA]
//a inherits from A.prototype
var b = f.getB(); //offer f.[getB]
//b inhertis from B.prototype
a.test(); //offer a.[test]
b.test(); //offer b.[test]
b.test2(); //offer b.[test2]
所以我必须让IDE以某种方式知道,这些函数存在于Function.prototype中,并且这些函数正在创建Function实例,并且它们正在写入这些实例的原型。 这只能通过我的代码的手动索引来实现,比如jsdoc,但这还不足以描述继承。 所以我需要一个可以处理至少js继承的IDE,我可以编写一个自动创建索引的插件。 (也许插件也可以处理继承,我不知道索引是如何工作的......)
哪个IDE能够(以及如何)?
解决方案1:
我发现在Eclipse中,javascript索引器是Web Tools Platform / Javascript开发工具的一部分。 源代码在这里。 开发人员写道,InferEngine易于扩展,因此您可以编写一个eclipse插件。 在这种情况下, 这个博客真的非常有用。 它有很多文章如何扩展JSDT,JSDT开发人员也可以提供帮助。 不幸的是,如果有另一个解决方案,我没有太多时间来创建这样的东西。
解决方案2:
环顾四周,发现真正的问题是,在Netbeans,Eclipse JSDT和Aptana中都没有完全支持JSDOC 3。 我在JSDOC 3支持下找到的唯一一个IDE是Jetbrains WebStorm,所以我会用它。 (没有测试Resharper for Visual Studio,但它也是JetBrains产品,所以它也可能有效。)
webstorm中jsdoc 3的原始示例:
/** @class*/
var A = Function.create(//offer Function.[create] -> OK!
/** @lends A.prototype*/
{
test: function (){
console.log("a");
},
testA: function (){
console.log("a2");
}
});
/** @class*/
/** @extends A*/
var B = A.extend(//offer A.[extend] -> OK!
/** @lends B.prototype*/
{
test: function (){
console.log("b");
},
testB: function (){
console.log("b2");
}
});
/** @class*/
var F = Function.create(//offer Function.[create] -> OK!
/** @lends F.prototype*/
{
/** @returns A*/
getA: function (){
return new A();
},
/** @returns B*/
getB: function (){
return new B();
}
});
var f = new F();
f.getA().test(); //offer f.[getA], offer f.getA().[test] -> OK
f.getA().testA(); //offer f.[getA], offer f.getA().[testA] -> OK
f.getB().test(); //offer f.[getB], offer f.getB().[test] -> OK
f.getB().testA(); //offer f.[getB], offer f.getB().[testA] -> OK
f.getB().testB(); //offer f.[getB], offer f.getB().[testB] -> OK
您可以使用安装了Resharper 6的WebStorm或VisualStudio之类的东西,它会构建所有对象的所有原型的列表,您可以使用它...它不是特别有用,我也不推荐它。但是事情总比没有好......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.