문제

나는 지난 몇 주 동안 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 스타일 마크 업을 선택할 수 없습니다. 이것은 한 시점에서 작동했지만 (내가 만든 첫 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에서 유효한 클래스입니까?

도움이 되었습니까?

해결책

Aptana의 코드 완료 동작과 관련된 모든 질문에 답변 할 수 있기를 바랍니다. Aptana의 코드 완료 협력을 장려하기 위해이 접근 방식을 성공적으로 사용하고 있습니다.

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

당신은 말합니다

또한 파일에서 작업하기 위해 코드 완료를 얻는 데 성공하지 못합니다.

그러나 나는 지금까지 행운을 빕니다. 그러나 f = new foo ()가 있지만 f = new bar ()로 변경하면 코드 완료는 foo 또는 bar와 달리 일반 ol '객체의 속성을 보여줍니다. f = new foo ()에서 변수 (b = new bar ()를 바꾸거나 편집기를 다시 시작하는 것이 도움이되는 것 같습니다.

차이점이 무엇인지 아이디어가 있습니까? 두 번째는 JavaScript에서 유효한 클래스입니까?

"new function ()"에 따르면, `new function ()`javaScript의 소문자 "f" , 같은

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

대신에

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

또는

var foo = function(){ ... }

속성의 개인 액세스를 구현하기위한 해결 방법의 일부입니다. 이 모든 것을 통해 JS에는 "클래스"가없고 오히려 객체가 없음을 명심하십시오. 모든 것이 대상입니다.

왜 Aptana가 마지막 [JSON] 스타일에서 작동하는지 아는 사람이 있지만 첫 번째는 아닙니다.

JSON 스타일 선언은 실제로 FOO라는 객체의 인스턴스를 생성하므로 Aptana는이를 찾는 데 아무런 문제가 없습니다. 함수를 사용하면 언급 한대로 별도의 인스턴스가 허용되지만 Aptana는 프로토 타입이 발견 될 때까지 기능으로 선언 된 것들의 속성을 추적하지 않는 것 같습니다. 내 추론은 Custom Object의 모든 인스턴스에 모든 속성이 지정되기 때문에 프로토 타입은 Aptana의 코드 완료를 트리거합니다. 프로토 타입이 없으면 각 인스턴스에 대해 속성을 다시 정의해야합니다 (일반적으로 생성자 함수에서 수행되지만 대부분의 상단 코드 블록에서는 사용자 정의 객체를 정의하기 위해 프로토 타입을 사용하여 생성자가 비어 있습니다). 이 링크는이 맥락에서 프로토 타입에 대해 자세히 설명합니다 http://www.phpied.com/3-ways-to-define-a-javascript-class/

다른 팁

Aptana의 기본 JavaScript 편집기 (Windows> Preferences> File Associations> *.js)의 기본 JavaScript 편집기는 무엇입니까? JavaScript 편집기가 아닌 Aptana JS 편집기를 사용합니다 (설치 기본값). 이러한 설정은 프로젝트마다 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top