在任何IDE中完成oo javascript代码 [英] Oo javascript code completion in any IDE

查看:105
本文介绍了在任何IDE中完成oo javascript代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你知道任何可以自动完成这种代码的IDE吗?

Do you know any IDE which can autocomplete this kind of code?

我这里有一个javascript类生成器:

I have a javascript class generator here:

(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;
    };
})(); 

我需要这些示例类的代码完成(在评论中写道):

I need code completion (wrote in the comments) for these example classes:

//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,我可以编写一个自动创建索引的插件。 (也许插件也可以处理继承,我不知道索引是如何工作的......)

So I must let the IDE somehow know, that these functions are existing in the Function.prototype, and these functions are creating Function instances and they are writing into the prototype of those instances. This is possible only with manual indexing of my code, like jsdoc, but that's not enough to describe for example inheritance. So I need an IDE which can handle at least js inheritance, and for which I can write a plugin that creates this indexing automatically. (Maybe the plugin could handle the inheritance too, I don't know how that indexing works exactly...)

哪个IDE能够(以及如何)?

Which IDE is capable of that (and how)?

推荐答案

解决方案1:

我发现在Eclipse中,javascript索引器是Web Tools Platform / Javascript开发工具的一部分。 源代码在这里。开发人员写道,InferEngine是易于扩展,因此您可以编写一个eclipse插件。
在这种情况下,这个博客真的非常有用。它有很多文章如何扩展JSDT,JSDT开发人员也可以提供帮助。不幸的是,如果有另一种解决方案,我没有太多时间来创建这样的东西。

I found that in Eclipse the javascript indexer is a part of Web Tools Platform / Javascript Development Tools. The source code is here. The developers wrote that the InferEngine is easy extendable, so you can write an eclipse plugin. In that case this blog is really-really-really useful. It has great articles how to extend JSDT, and the JSDT developers can help too. Unfortunately I don't have much time to create such a thing if there is another solution.

解决方案2:

环顾四周,发现真正的问题是,在Netbeans,Eclipse JSDT和Aptana中都没有完全支持JSDOC 3。我在JSDOC 3支持下找到的唯一一个IDE是Jetbrains WebStorm,所以我会用它。 (没有为Visual Studio测试Resharper,但它也是JetBrains产品,所以它也可能有效。)

Was looking around and found that the real problem is, that JSDOC 3 is not supported completely neither in Netbeans, nor in Eclipse JSDT and Aptana. The only IDE I found with JSDOC 3 support is Jetbrains WebStorm, so I'll use that. (Did not test the Resharper for Visual Studio, but it's JetBrains product either, so it possibly works too.)

webstorm中jsdoc 3的原始示例:

The original example with jsdoc 3 in webstorm:

/** @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

这篇关于在任何IDE中完成oo javascript代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆