我在过去几周一直在进行javascript开发,并尝试过JSDT和Aptana来协助代码完成。 JSDT并不是很好,但我确实有更多的运气与Aptana(用作eclipse插件,而不是独立产品)。我遇到的问题是,当我创建javascript类时,我无法使代码完成工作。例如,如果我使用以下代码,则代码完成不起作用:
var foo = new function(value){
this.myMethod= function(){
}
}
我还验证了以下内容不起作用:
function foo(value){
this.myMethod= function(){
}
}
我发现使用JSON样式确实有效:
var foo = {
myMethod: function(){
}
}
有谁知道为什么Aptana适用于最后一种风格,但不是第一种?使用JSON样式对我来说不起作用,因为我必须有相关类的单独实例。
另外,我在使用文件完成代码完成方面不是很成功。例如,如果我在javascript目录中有3个文件,那么我通常无法让Aptana在其他两个类中获取JSON样式标记。这个DID在某一点上工作(对于我创建的前两个类),但从那时起,每当我添加新类时,它们就不会被拾取。
非常感谢你的帮助。
杰里米
我发现以下情况有效:
/**
* The foo function
*/
function foo() {
}
/**
* The bar function
* @param {Object} a Object a
* @param {Object} b Object b
*/
function bar(a, b){
};
foo.prototype.b = bar;
var x = new foo();
x.b
在上面的例子中,关键是你正在使用原型注册方法。我也尝试了以下方法,但它没有用。
/**
* The foo function
*/
var foo = new function() {
}
/**
* The bar function
* @param {Object} a Object a
* @param {Object} b Object b
*/
function bar(a, b){
};
foo.prototype.b = bar;
var x = new foo();
x.b
任何想法有什么区别?第二个是javascript中的有效类吗?
答案 0 :(得分:2)
希望我能帮助您回答有关Aptana代码完成行为的所有问题。为了鼓励Aptana的代码完成合作,我一直在使用这种方法:
var foo = function(){
}
foo.prototype.a = "a"
foo.prototype.b = function(){ alert(this.a) }
你说
此外,我在使用文件完成代码完成方面不是很成功。
但到目前为止我还好运。但是,我发现如果我有f = new foo()但将其更改为f = new bar(),代码完成会显示普通ol'对象的属性,而不是foo或bar。重命名变量(b =来自f = new foo()的新条形码())或重新启动编辑器似乎有所帮助。
任何想法有什么区别?第二个是javascript中的有效类吗?
关于“新功能()”,根据`new function()` with lower case "f" in JavaScript,类似
var foo = new function(){ ... }
而不是
var foo = { ... } // JSON style
或
var foo = function(){ ... }
是实现属性私有访问的变通方法的一部分。请记住,JS中没有“类”,而是对象。一切都是对象。
有谁知道为什么Aptana适用于最后[JSON]风格,但不是第一种?
JSON样式声明实际上创建了一个名为foo的Object的实例,因此Aptana没有问题查找它。正如您所提到的,使用函数允许单独的实例,但Aptana似乎不会跟踪在找到原型之前声明为函数的事物的属性。我的理由是,原型触发Aptana的代码完成,因为自定义对象的每个实例都将指定所有属性。如果没有原型,必须为每个实例重新定义属性(通常在构造函数中完成,但是在我最顶层的代码块中注意我的构造函数是空的,因为我使用prototype来定义自定义对象)。此链接在此上下文中解释了有关原型的更多信息http://www.phpied.com/3-ways-to-define-a-javascript-class/
答案 1 :(得分:0)
Aptana中的默认JavaScript编辑器是什么(在Windows>首选项>文件关联> * .js下)?我使用Aptana JS编辑器而不是JavaScript编辑器(默认安装)。请注意,每个项目的这些设置可能不同。