2

위키의 질문 일 수도 있지만 여전히 있습니다. 어떤 접근 방식은 자바 스크립트 정신에 더 적합 함을 선언합니다자바 스크립트에서 객체를 새로 만들면 어떤 이점이 있습니까?

var Report = function(data) { 
    var that = this; 
    that.send = function() { ... }; 
}; 

var r = new Report(data); // create and validate the data 
r.send(); // encode and send the data 

또는

var sendReport = function(data) { 
    ... 
    // create, validate, encode and send the data 
    ... 
}; 

첫 번째 방법은 더 OO, 더 많은 기능 두 번째 것 같다? 처음에는 Report의 기능이 더 테스트 가능해 보일 수 있습니다 (예를 들어이 단계에서는 send()). 또한 상태를 검사 할 때 디버거에서 Report 유형의 객체를보고 싶습니다.

두 번째 방법은 더 간단 할 수도 있지만 테스트는 어렵습니다.

개인적으로 첫 번째 접근 방식을 사용하고 있지만 "잘못된"도메인에 OO "원칙"을 적용하려고하면 질문이 생깁니다. 제 질문에 더 효과적으로 답변 해주세요.

+0

OO 원칙은 "new"연산자와 아무 관련이 없습니다. 당신의 두 번째 목표와 함께 모든 수업을 개발합니다. –

+0

@some_coder 두 번째 방법은 클래스가 아니라 단순한 함수입니다. 그것은 데이터를 가져 와서 전송하고 완료됩니다. – Esailija

+0

JS의 @Esailija에는 다른 언어 (예 : C++/java)와 같은 "클래스"가 없습니다. 첫 번째 접근법은 함수이기도합니다 (함수 포인터라고 볼 수 있습니다). 유일한 차이점은 "var x = new Report (data)"를 사용하여 인스턴스를 만드는 것입니다. 두 번째 접근 방식에서는 "var x = sendReport (data)"를 사용하여 인스턴스를 만듭니다. 아니면 그냥 그 질문을 이해하지 못합니다. –

답변

1

귀하의 질문에 실제로는 new 연산자에 대한 것 같지 않습니다; OO 또는 함수형 프로그래밍을 사용해야하는지 여부에 관한 것입니다.

이와 관련하여 OO는 완전히 내에서 JavaScript의 범위입니다. 자바 스크립트는 매우 객체 지향 언어 인 API (e.g.e.g.)에서 볼 수 있습니다.

HTML5는 이것을 더 취하여 객체를 더 잘 제어 할 수 있도록 Object 객체에 new methods을 추가합니다.

new의 사용에 대해 언급하고 그것을 피할 것인지 말 것인지를 묻는다면 나는 this excellent answer으로 알려줄 것입니다 (그리고 new 사용을 알려주십시오).

+0

더주의 깊게 보면,이 질문은 내가 수행하는 클래스 또는 단지 기능을 함 "에 대한 자세한로 나에게 보인다 그것 모두 "는 자바 스크립트에 관한 것이 아닙니다. 나는 모든 언어로 하나님의 기능을 할 수있다. – Esailija

+0

@Esailija : 나는 그것이 확실하지 않은가요? * 질문은 "OO"원칙 "을"잘못된 "도메인에 적용하려고하는 경우입니다. * – Matt

+0

우리는 코드 검토를 통해 많은 논쟁을 벌이고 있습니다. 따라서"올바른 "프로그래밍 접근법에 관한 것입니다. C++/Java 자바 스크립트? 나는 언어를 사용하거나 남용하고 있는가? 그것이 문제입니다. 다시 말하면, 그 말씨가 옳다는 것을 희망하십시오. 추신 : @ Esailija : 나는 당신의 (지워진) 대답이 매우 유익하고 교육적인 것을 발견했다. – BreakPhreak

0

하지만 일반적으로 코드가 작을 때 두 번째 코드로 이동하고 코드가 커지면 처음으로 마이그레이션하려고합니다. 모든 것을 객체 지향으로 만드는 것은 중요하지 않지만, 객체로 이해할 수있는 기능 그룹이있을 때, 객체를 만들고 싶을 때입니다.

두 번째 옵션은 단일 기능이 너무 많으면 테스트 할 수 없습니다. 그렇지 않으면 함수에 대한 매개 변수를 변경하고 결과를 보는 것만으로도 매우 테스트 가능합니다.

0

변수의 객체를 인스턴스화하고 싶을 때, 자바 스크립트 객체로 더 많은 작업을 할 때, js의 프로토 타입을 사용할 수있을 때 메소드와 변수를 오버라이드 할 수있을 때입니다.

1

지금 내가 보는 방식은 두 번째가 data을 사용하는 간단한 함수라는 것입니다. 그리고 당신은 그것의 클래스를 만들고 여러 가지 방법으로 나누는 것이 유익한 지 여부를 궁금해합니다. . 그래서 그 대신이의

:

sendReport(data); 

당신은 할 것 :

Report는 검증과 인코딩이 내부 메소드가
var a = new Report(data); 
a.send(); 

. 그것들은 3 개의 다른 함수가 될 것이기 때문에 분명히 더 테스트 가능할 것입니다.

성능은이 2 개의 추가 함수 호출 및 1 개 추가적인 객체 생성있어 고려해야 할 것도 없다. 아마도 초당 수백만 번 또는 수백만 번 보고서를 보내지 않을 것입니다. 특히 네트워크 입력/출력을 의미하기 때문에 입니다.

새 인스턴스를 구성 할 필요 아무도 없다

, 당신은 할 수 :

var report = { 
    encode: function(){}, 
    validate: function(){}, 
    send: function(data) { 
     if(this.validate(data)) { 
      data = this.encode(data); 
     } 
     else { 
      //? 
     } 

     //send 
    } 
} 

그런 다음 새로운 인스턴스를 구축 할 필요없이 위에서 언급 한 이점을 얻을 수 있습니다 :

report.send(data); 
0

을 나는 다른 사람들이 제안했듯이 이것이 실제로 OO 대 기능적이라고 생각하지 않는다.

진짜 문제는 보고서 자체에 유용한 추상화 여부입니다. 즉, 바로 보내기보다는 다른 작업을 수행하려는 경우 즉, 추상화를 구현하면 유용합니다. OO에서는 클래스 또는 이에 상응하는 클래스 (JS에서는 생성자 함수)가됩니다. 함수형 언어에서는 일반적으로 모듈이나 추상 데이터 형식을 소개합니다.

당신은 추상화를 필요로하지 않는 경우

는 단지 하나의 절차/기능을 사용하십시오.