Дополнение кода - Aptana Eclipse Plugin - PullRequest
3 голосов
/ 16 марта 2010

Последние пару недель я занимался разработкой 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 для меня не сработает, потому что мне нужно иметь отдельные экземпляры рассматриваемого класса.

Кроме того, мне не очень удается заставить завершение кода работать с файлами. Например, если у меня есть 3 файла в каталоге javascript, я обычно не могу заставить 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

В приведенном выше примере ключ заключается в том, что вы регистрируете метод с использованием прототипа. Я также попробовал следующее, но это не сработало.

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

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Надеюсь, я смогу помочь ответить на все ваши вопросы, связанные с поведением дополнения кода Aptana. Чтобы поощрить сотрудничество по дополнению кода Aptana, я успешно использовал этот подход:

var foo = function(){
}
foo.prototype.a = "a"
foo.prototype.b = function(){ alert(this.a) }

Вы говорите

Кроме того, мне не очень удается заставить выполнение кода работать с файлами.

но мне пока повезло. Тем не менее, я обнаружил, что если у меня есть f = new foo (), но я изменил его на f = new bar (), при завершении кода отображаются свойства простого старого объекта, а не foo или bar. Переименование переменной (b = new bar () из f = new foo ()) или перезапуск редактора, похоже, помогут.

Есть идеи, в чем разница? Является ли второй допустимый класс в JavaScript?

О "новой функции ()", согласно `новой функции ()` с нижним регистром "f" в JavaScript , что-то вроде

var foo = new function(){ ... }

вместо

var foo = { ... } // JSON style

или

var foo = function(){ ... }

является частью обходного пути для реализации частного доступа к свойствам. Помните обо всем этом, что в JS нет «классов», а есть «Объекты». Все является объектом.

Кто-нибудь знает, почему Aptana работает с последним стилем [JSON], но не с первым?

Объявление стиля JSON фактически создает экземпляр объекта с именем foo, поэтому у Aptana нет проблем с его поиском. Как вы упоминаете, использование функции позволяет создавать отдельные экземпляры, но Aptana, похоже, не отслеживает свойства вещей, которые объявлены как функции, пока не будет найден прототип. Я считаю, что прототип запускает завершение кода Aptana, потому что каждый экземпляр пользовательского объекта будет иметь все указанные свойства. Без прототипа свойства должны быть переопределены для каждого экземпляра (обычно это делается в функции конструктора, но обратите внимание, что в моем самом верхнем блоке кода мой конструктор пуст, потому что я использую прототип для определения пользовательского объекта). Эта ссылка объясняет больше о прототипе в этом контексте http://www.phpied.com/3-ways-to-define-a-javascript-class/

0 голосов
/ 19 января 2011

Какой у вас по умолчанию редактор JavaScript в Aptana (в Windows> «Настройки»> «Ассоциации файлов»> * .js)? Я использую Aptana JS Editor, а не JavaScript Editor (по умолчанию при установке). Обратите внимание, что эти настройки могут отличаться в зависимости от проекта.

...