DRY 원칙을 유지하기 위해 function.call() 호출 수를 줄이기 위해 함수의 프로토 타입을 수정하기로 결정했습니다.동일한 프로토 타입 및 컨텍스트 내의 다른 함수에서 함수 호출이
다음은 내가 현재하고있는 일에 대한 스 니펫이며 내가하려고하는 일에 대한 자세한 설명입니다.
com.domain.$ = function(s){
if(!this){return new com.domain.$(s);}
this.selector = s;
this.elements = document.querySelectorAll(s);
}
com.domain.$.prototype = (function(){
function exe(f){
var e = this.elements,
el = e.length;
for(var i=0; i<el; i++){
f(e[i]);
}
}
function addClass(c){exe.call(this,function(el){el.classList.add(c);});}
function removeClass(c){exe.call(this,function(el){el.classList.remove(c);});}
function toggleClass(c){exe.call(this,function(el){el.classList.toggle(c);});}
return {
addClass:addClass,
removeClass:removeClass,
toggleClass:toggleClass
}
}());
나는 이것이 내가 jQuery를의 기능을 모방하려고 시도하고 매우처럼 보이는 알고 있습니다. 고의적인데, 이것은 자바 스크립트를 대체하는 것이 아니라 오히려 개인적으로 더 잘 이해할 수 있도록하기위한 것입니다. 말했다
은, 내가 뭘하고 싶은 내가 원하는 것을 할
this
의 맥락 위해서는
exe.call(this[, fnc]);
를 통해
exe()
를 호출 할 필요성을 제거한다. 함수 바인딩 (
.bind()
)을 통해이 작업을 수행 할 수 있다고 믿지만, 내가 원하는 방식은 아닐 수도 있습니다. 좋아
com.domain.$.prototype.exe = function(){}
과 전화 :
그렇게함으로써function addClass(c){this.exe(function(){});}
은, 그러나, 나는 내 원래의 폐쇄에 의해 제공 exe()
의 개인 가시성을 잃고 나는 대신 뭔가를 할 수 있습니다 이해 암호. 가능하다면 나는 그것을 지키고 싶습니다.
내 질문에, 다음, 내가, exe.call(this
의 중복 사용을 줄일 exe()
내 this
에 대한 올바른 컨텍스트를 소유 할 수있는 방법으로 내 원래의 코드 내에서 exe()
를 결합하고, 개인을 유지할 수 있는지 여부입니다 클로저 내의 가시성?
이것이 달성하려는 목표를 제대로 수행하지 못하는 것 같으면 다른 옵션을 고려해보기에 더 기쁩니다.
미리 감사드립니다.
감사합니다. 알아 두 셨 듯이 분명히 이유로 생성자 정의에서 기능을 유지하려고합니다. 당신도 알다시피, 나는'this.elements'를'exe()'에 전달할 수 있었고 이것을 고려해 보았습니다.하지만'exe (this.elements, ...) '를 중복해서 사용하지 않도록하고 싶었습니다. 스크립트 파일은 더 작습니다. – AustinP
몇 가지 일은 불가능합니다 :) 가독성과 유지 보수성에 초점을 맞추고 파일 크기를 줄이기 위해 코드 마이 저는 사용해야합니다. –