JS 프래그먼트를 렌더링하기 위해 JS 스크립트로 작업하고 있습니다. 내 클래스에 두 개의 정적 변수를 선언해야합니다. "C#"과 같은 음표 이름을 정수 MIDI에 매핑하는 한 객체는 다른 MIDI 배열을 참고하여 각 MIDI 미디에 대한 세부 정보를 제공합니다. 클래스/함수 자체 뒤에 선언해야하는 것처럼 보이지만 생성자 함수에서 참조 할 수 있는지 확인하고 싶습니다.익명 함수 내에서 javascript 클래스의 정적, 상수 배열을 선언하는 방법은 무엇입니까?
문제를 복잡하게하는 것은 이름 충돌을 방지하기 위해 익명 함수 내에서 내 코드의 네임 스페이스를 지정하려는 것입니다. 이는 모범 사례라는 것을 이해합니다.
몇 가지 코드로 퍼터를 돌렸고 이와 비슷한 것을 가지고 있지만, 마지막에있는 것들이 효과가 없을 것이라고 생각합니다.
(function(){
// object to encapsulate this module
var MyClass = function() {
this.foo = "foo";
this.bar = "bar";
};
MyClass.nameToMidiNumber = {"C0":0,"C#0":1,"Db0":1,"D0":2,"D#0":3,"Eb0":3}; // and so on
MyClass.midiData = [{"octave":0,"utf8_name":"C","ascii_name":"C","frequency":8.1757989156},{"octave":0,"utf8_name":"C♯\/D♭","ascii_name":"C#\/Db","frequency":8.661957218}]; // etc
if(typeof window!="undefined"){
window.MYNAMESPACE || (window.MYNAMESPACE = {});
if(window.MYNAMESPACE.MyClass){
for(var prop in MyClass){
window.MYNAMESPACE.MyClass[prop]=MyClass[prop]
}
}else{
window.MYNAMESPACE.MyClass=MyClass
}
} else {
throw "'window' not defined. Unable to attach MyClass.";
}
})();
이 작업을 수행하고 있습니까? 이상적으로, HTML 태그와 스크립트를 포함 한 후 :
<script type="text/javascript" src="myscript.js"></script>
는 그냥과 같이 객체를 인스턴스화 수 :
var gtr = new MYNAMESPACE.MyClass(prm1, prm2, prm3);
나는 또한 전환이 ES6에 현재 진행되고 있음을 알고 있어요 class and static keywords. 대신 그걸 사용해야합니까?
코드를 익명 함수로 래핑하는 것에 대해 걱정할 필요가 없습니다. 당신은 코드 전체에이 쓰레기로 끝나고 이제는 특정 방식으로 작동하지 않습니다. 모듈은 다른 라이브러리/프레임 워크로 사용되거나 마운트되는 방식에 대해 신경 쓰지 않아야합니다. browserify 나 babel 같은 번들러가 그 일을 처리하게하십시오. 일반 ES6 모듈을 작성한 다음 네임 스페이스가 필요한 경우에는 나중에 수행 할 수 있습니다. – naomik
익명 기능을 삭제해도 무척 기쁩니다 (모든 것이 MYNAMESPACE에 첨부되어있을 것입니다. 그러나이 프로젝트에 대해 transpiling이나 babel이나 반응이나 다른 말도 안되는 것에 관심이 없습니다.) ] (https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.xxxqt56co) –
@ S.Imp 그것은 NONSENSE가 아닙니다. – Ringo