过去几周我一直在进行 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 在某一点上起作用(对于我创建的前 2 个类),但从那时起,每当我添加新类时,它们就不会被拾取。
非常感谢您的帮助。
杰里米
我已经确定以下工作:
/**
* 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
在上面的示例中,关键是您正在使用原型(prototype)注册方法。我也尝试了以下方法,但没有用。
/**
* 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 中的有效类吗?
最佳答案
希望我能帮助回答您所有与 Aptana 的代码完成行为相关的问题。为了鼓励 Aptana 的代码完成合作,我一直在成功地使用这种方法:
var foo = function(){
}
foo.prototype.a = "a"
foo.prototype.b = function(){ alert(this.a) }
你说
Also, I am not very successful in getting code completion to work across files.
但到目前为止我运气不错。但是,我发现如果我有 f = new foo() 但将其更改为 f = new bar(),代码完成将显示普通 ol' 对象的属性,而不是 foo 或 bar。重命名变量(b = new bar() from f = new foo() )或重新启动编辑器似乎有帮助。
Any ideas what the difference is? Is the second a valid class in javascript?
关于“new function()”,根据`new function()` with lower case "f" in JavaScript , 像
var foo = new function(){ ... }
代替
var foo = { ... } // JSON style
或
var foo = function(){ ... }
是实现属性私有(private)访问的解决方法的一部分。请记住,在 JS 中没有“类”,而是对象。万物皆对象。
Does anyone know why Aptana works for the last [JSON] style, but not the first?
JSON 样式声明实际上创建了一个名为 foo 的对象实例,因此 Aptana 可以毫无问题地查找它。正如您提到的,使用函数允许单独的实例,但 Aptana 似乎在找到原型(prototype)之前不会跟踪声明为函数的事物的属性。我的推理是,原型(prototype)触发 Aptana 的代码完成,因为自定义对象的每个实例都将具有指定的所有属性。没有原型(prototype),必须为每个实例重新定义属性(通常在构造函数中完成,但请注意,在我最上面的代码块中,我的构造函数是空的,因为我使用原型(prototype)来定义自定义对象)。此链接在此上下文中解释了有关原型(prototype)的更多信息 http://www.phpied.com/3-ways-to-define-a-javascript-class/
关于javascript - 代码完成——Aptana Eclipse 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458071/