객체 지향 Javascript 베스트 프랙티스?
Javascript에서 큰 프로젝트를 코딩하고 있습니다.마지막은 꽤 모험이었던 것으로 기억합니다.왜냐하면 해킹한 JS는 금방 읽을 수 없게 되기 때문에 이 코드를 깨끗하게 하고 싶습니다.
오브젝트를 사용하여 lib를 작성하고 있습니다만, JS에서는 스코프, 메모리 관리, 네임스페이스 등의 중요한 결과를 나타내는 몇 가지 방법이 있습니다.G:
- 를 사용합니다.
var
아니다. - 내의 의 정의
(function(){...})()
style , jquery style; - 를 사용합니다.
this
, 아니 아니, 아니, 아니, 아니, 아니, 아니, 아니, 아니, 아니. - 를 사용합니다.
function myname()
★★★★★★★★★★★★★★★★★」myname = function()
; - 오브젝트 본체의 방법을 정의하거나 "접근"을 사용한다.
- 기타.
그렇다면 JS에서 OO로 코딩할 때 정말 좋은 방법은 무엇일까요?
학구적인 설명이 정말 기대되네요.질과 견고성을 다루는 한, 책과의 링크를 따뜻하게 환영한다.
편집:
몇 가지 읽기는 했지만, 위의 질문에 대한 답변과 베스트 프랙티스에 관심이 많습니다.
var 사용 여부
'변수'와 .var
스테이트먼트, 그렇지 않으면 글로벌스코프에 도달합니다.
할 가치가 있다."use strict";
) 선언되지 않은 변수 할당이 느려집니다.
현재 JavaScript에는 블록 스코프가 없습니다.Crockford 스쿨에서는 함수 본문의 선두에 var 문을 붙이는 방법을 가르쳐 주고 있습니다.Dojo의 스타일 가이드에서는 모든 변수를 가능한 한 작은 범위에서 선언해야 합니다.(JavaScript 1.7에서 소개된 문장과 정의는 ECMAScript 표준의 일부가 아닙니다.)
정기적으로 사용되는 개체의 속성을 로컬 변수에 바인딩하는 것이 전체 스코프 체인을 검색하는 것보다 빠르기 때문에 이 속성을 로컬 변수에 바인딩하는 것이 좋습니다.(최고의 퍼포먼스와 저메모리 소비량에 대해서는, 「JavaScript 최적화」를 참조해 주세요.
파일 또는 '(function(){...})'에서 정의
코드 이외의 오브젝트에 도달할 필요가 없는 경우 코드 전체를 함수식으로 랩할 수 있습니다.이것을 모듈 패턴이라고 부릅니다.퍼포먼스상의 이점이 있어, 코드를 상세하게 축소해 가릴 수도 있습니다.또한 글로벌 네임스페이스를 오염시키지 않도록 할 수도 있습니다.JavaScript의 래핑 함수를 사용하면 애스펙트 지향 동작을 추가할 수도 있습니다.Ben Cherry는 모듈 패턴에 대한 자세한 기사를 가지고 있습니다.
'this' 사용 여부
JavaScript에서을 사용하는 JavaScript 사용을 수 .this
어떤 유전 패턴을 사용하느냐는 취향의 문제입니다.다른 경우에는 "이것"이 없는 JavaScript 위젯에 대한 Peter Michaux의 문서를 확인하십시오.
function myname() 또는 myname = function();을 사용합니다.
function myname()
이며, "함수 선언"입니다.myname = function();
는 변수 '비록'에입니다.myname
후자의 형식은 함수가 1등급 객체임을 나타냅니다.변수와 마찬가지로 함수를 사용하여 무엇이든 수행할 수 있습니다.이들 사이의 유일한 차이점은 모든 함수 선언이 스코프의 맨 위로 올라간다는 것입니다.이것은 경우에 따라서는 문제가 될 수 있습니다.그렇지 않으면 동등합니다. function foo()
줄임말 형식입니다.호이스트에 대한 자세한 내용은 JavaScript Scoping and Hoisting 기사를 참조하십시오.
개체 본문에 메서드 정의 또는 "프로토타입" 사용
당신 마음대로 하세요.JavaScript에는 유사 클래식, 프로토타입, 기능 및 부품의 4가지 객체 생성 패턴이 있습니다(Crockford, 2008).각각 장단점이 있습니다. 그의 비디오 강연에서 크록포드를 보거나 그의 책 "The Good Parts as Anon"이 이미 제안했듯이.
프레임워크
몇 가지 JavaScript 프레임워크를 선택하여 규칙과 스타일을 학습하고 자신에게 가장 적합한 프랙티스와 패턴을 찾을 것을 권장합니다.예를 들어 Dojo Toolkit은 객체 지향 JavaScript 코드를 작성할 수 있는 견고한 프레임워크를 제공하며, 여러 상속도 지원합니다.
패턴
마지막으로 일반적인 JavaScript 패턴과 안티패턴을 탐구하는 블로그가 있습니다.또한 "JavaScript에 대한 코딩 표준이 있습니까?"라는 질문도 확인하십시오.[ Stack Overflow ]으로 설정합니다.
이 질문을 드렸기 때문에 제가 읽거나 응용 프로그램에 넣은 것들을 적어보겠습니다.그래서 사람들은 그것을 읽는 것에 좌절하지 않을 것이다. 왜냐하면 대부분의 답은 위장된 RTMF이기 때문이다.
용도가 다르다
모든 변수는 JS에서 더 높은 범위에서 이미 선언되어야 합니다.따라서 새로운 변수가 필요할 때마다 글로벌 변수를 눈치채지 못하고 조작하는 것과 같은 나쁜 결과를 피하기 위해 변수를 선언하십시오.따라서 항상 var 키워드를 사용합니다.
비공개로 하다변수만 " " 를 합니다.this.my_var = my_value
그렇게 하기 위해서.
메서드 선언
JS에서는 메서드를 선언하는 방법이 많이 있습니다.OO 프로그래머에게 가장 자연스러우면서도 효율적인 방법은 다음과 같은 구문을 사용하는 것입니다.
오브젝트 본체 내부
this.methodName = function(param) {
/* bla */
};
단점이 있습니다.재미있는 JS 스코프로 인해 내부 함수가 "this"에 액세스할 수 없습니다.Douglas Crockford는 "that"라는 이름의 재래식 로컬 변수를 사용하여 이 제한을 우회할 것을 권장합니다.그래서...
function MyObject() {
var that = this;
this.myMethod = function() {
jQuery.doSomethingCrazy(that.callbackMethod);
};
};
자동 엔드 오브 라인에 의존하지 않음
으로 JS를 추가하려고 .;
디버깅에이 동작에 의존하지 말아 주세요.디버깅하기 어려운 에러가 발생할 수 있습니다.
먼저 프로토타입 기반 프로그래밍에 대해 읽고 어떤 종류의 야수를 다루고 있는지 파악한 후 MDC의 JavaScript 스타일 가이드와 MDC의 JavaScript 페이지를 살펴봅니다.또한 툴로 코드 품질을 강제하는 것이 최선이라고 생각합니다.JavaScript Lint 또는 기타 변형.
OO의 베스트 프랙티스는 코드 품질에 집중하기 보다는 패턴을 찾고 싶은 것처럼 들리므로 구글 검색: javascript 패턴과 jQuery 패턴을 살펴보십시오.
당신은 존 레식(jQuery)의 자바스크립트 닌자의 비밀을 확인하고 싶을 것이다."이 책은 중간 자바스크립트 개발자를 데려와서 처음부터 크로스 브라우저 자바스크립트 라이브러리를 만드는 데 필요한 지식을 제공하기 위한 것입니다."
초안은 퍼블리셔에서 입수할 수 있습니다.http://www.manning.com/resig/
Douglas Crockford는 홈페이지에도 훌륭한 JavaScript 기사를 게재하고 있습니다.http://www.crockford.com/
저는 종종 제 Javascript에 MooTools를 사용하는 유일한 사람이라고 느낍니다.
My Object Oriented Tools, mootools의 약자입니다.
javascript에서 OOP에 대한 그들의 생각이 정말 마음에 들어요.jquery와 함께 클래스 구현을 사용할 수 있으므로 jquery를 버릴 필요가 없습니다(mootools도 마찬가지입니다).
어쨌든 첫 번째 링크를 잘 읽어보고 어떻게 생각하는지 확인해보세요.두 번째 링크는 mootools 문서에 대한 것입니다.
다음은 대부분의 근거를 다루는 책입니다.
고품질 애플리케이션 및 라이브러리를 위한 객체 지향 Javascript
언급URL : https://stackoverflow.com/questions/907225/object-oriented-javascript-best-practices
'programing' 카테고리의 다른 글
$(문서)에 해당하는 jQuery 이외의 것은 무엇입니까?ready()? (0) | 2022.09.18 |
---|---|
php page html 출력을 최소화하는 방법 (0) | 2022.09.18 |
정렬되지 않은 목록에 있는 요소의 빈도를 계산하려면 어떻게 해야 합니까? (0) | 2022.09.18 |
파일 작성 및 수정 날짜/시간을 얻으려면 어떻게 해야 합니까? (0) | 2022.09.18 |
2개의 .jar 파일 비교 (0) | 2022.09.18 |