2016-10-20 8 views
0

이 코드를 갖는WebStorm의 콜백 함수에서 'this'인스턴스를 어떻게 문서화 할 수 있습니까?

function Element() { 
    this.name = "yay"; 
} 
Element.prototype.extend = function(object) { 
    if (object instanceof Object) { 
     for (var n in object) { 
      if (object.hasOwnProperty(n)) { 
       this[n] = object[n]; 
      } 
     } 
    } 
}; 

var el = new Element(); 
el.extend({ 
    update: function() { 
     console.log(this.name); 
    } 
}); 

내가 WebStorm는 update()thisElement의 인스턴스 알고 싶어요,하지만 난 정말 어떻게 해야할지 모르겠다.

내가 도달 한 최대

은 이것이다 :

el.extend({ 
    /** 
     * @this Element 
     */ 
    update: function() { 
     console.log(this.name); 
    } 
}); 

그러나 나는 모든 extend()에서 그렇게하고 싶지 않아.

는 또한이 발견

/** 
* @typedef {Object} FunctionExtend 
*/ 
/** 
* @param {FunctionExtend} object 
*/ 
Element.prototype.extend = function(object) { 
    [...] 

을하지만 난에 붙어 :

  • 어떻게 매개 변수의 정의되지 않은 수를 가지고 FunctionExtend를 선언 할 수 있습니다.
  • @parameter이 매개 변수 이름을 모른 채 콜백이 될 것이라고 알려주는 방법.
  • @this 콜백이 무엇인지 알려주는 방법.
+2

실행이 불가능한 것처럼 보입니다 - 실행 전 실행시 결정되는 'this'의 ** 값 **을 어떻게 알 수 있습니까? 만약 누군가가'Element.prototype.extend' 문맥을 다시 바인딩하면 어떻게 될까요? 'this'의 값이 변경되어서 문서가 쓸모 없게됩니다. –

+0

나 자신이 만든 엔진이기 때문에 IDE에서이 메시지가 나타나지 않도록하고 싶습니다. http://i.imgur.com/FJg6yOh.png는 http://i.imgur.com으로 피할 수 있습니다. /KjiRSDA.png하지만, 모든 함수에서 그렇게하고 싶지는 않습니다. 그래서 확장 함수에서 대신 할 수있는 방법이 있다면 생각하고있었습니다. –

+0

나는 본다. 음, ** a) ** 당신이 걱정해야하는 ** 진짜 ** 질문, 즉 "웹 스톰 IDE에서 ___ 메시지를 피하는 방법", 그리고 ** b) ** 아마 당신은 그 특정 검사를 Webstorm에서 막아서 당신을 괴롭히지 않게하십시오 :) –

답변

2

프로토 타입을 일반적으로 확장하면 나쁜 생각인데, JSDoc과 같은 쓰기 시간 문서화 도구로는 잘 돌아 가지 않습니다.

모든 기능을 개별적으로 문서화 할 수밖에 없습니다.

+0

나는 그곳에 코멘트를 추가했다. 나는 그것을 여기에서 반 복사한다. 따라서 IDE에서 이러한 메시지를 피하는 것은 불가능합니다 : http://i.imgur.com/FJg6yOh.png? jQuery를 사용하여 확장하면 http://i.imgur.com/XtRht51.png 오류가 표시되지 않습니다. 왜? –

+1

@ JorgeFuentesGonzález'jQuery.fn.extend' 함수가 어떻게 문서화 (또는 구현)되었는지 검사 해 보았습니까? 거기에 단서가있을 수 있습니다. (jQuery도 예외는 아닙니다.) –

+0

plus_1 상표 : :) –