2011-01-12 5 views
4
에서 객체 선언에 대한 질문은이 차이 무엇

:자바 스크립트

function Book() { 
    this.title = ''; 

    this.setTitle = function(title) { 
     this.title = title; 
    } 
} 

나이 :

function Book() { 
} 
Book.prototype.title = ''; 
Book.prototype.setTitle = function(title) { 
    this.title = title; 
} 

구문 이외의 어떤 차이가 있나요?

답변

3

대략 prototypes을 읽어야합니다.

첫 번째 예제에서 함수는 생성 된 인스턴스의 Book에 설정합니다.

두 번째 예제에서는 프로토 타입 상속을 사용하고 있습니다. 즉, Books은 모두 setTitle 함수를 상속합니다.

두 번째 것은 메모리를 절약하고 기능은 모든 Book 인스턴스에서 "업데이트"하기 쉽습니다.

처음에는 this을 제목에두고 closures을 사용하여 변수를 비공개로 설정할 수 있으므로 사용 사례가 있습니다.

function Book(title) { 
    var title = title; 

    this.getTitle = function() { // function keeps a reference to title 
     return title; // now we only have a getter, but no setter for title 
         // thus title is essentially private 
    } 
} 
2

Book.prototype.setTitle을 사용할 때 하나의 setTitle-function 만 만들어지고 이후의 모든 Book 인스턴스에 다시 사용됩니다.

첫 번째 예에서 Book의 모든 인스턴스는 각각의 고유 한 setTitle-function을 만듭니다.

따라서 프로토 타입을 사용하는 것이 좋습니다.

0

첫 번째는 book 인스턴스에서 title 속성과 setTitle 메서드를 직접 설정합니다. 두 번째 요소는 Book의 프로토 타입에 해당 구성원을 설정합니다. 두 번째는 일반적으로 OOP JavaScript에 대한 더 나은 접근 방식입니다.