2014-12-09 2 views
0

그래서 난이 생성자 기능과 몇 가지 프로토 타입 방법이 함수 본문 제공 :JS : 프로토 타입 상속 자식 방법은 나에게

var test = function(name, surname){ 

    this.name = name 
    this.surname = surname 

} 

test.prototype.hello = function(){ 

    console.log("hello " + this.name) 

} 

test.prototype.hi = function(name){ 

    console.log("hi " + this.name) 

} 

test.prototype.hi.surname = function(){ 

    console.log("hi " + this.surname + this.name) 

} 

을 그리고 난이 같이 호출 : 왜

var hii = function(){ 

    var x = new test("kevin", "vanhove") 

    x.hello() 
    x.hi.surname() 

}() 

입니다 x.hi.surname()에 대한 호출에서이 출력 (함수 본문)을 제공하고 있습니까? 당신이 기능이 "안녕하세요"에 대한 참조가 될 것입니다

x.hi.surname(); 

은 "성"함수 내에서 this의 값을 호출

hello kevin 

hi function(){ 

    console.log("hi " + this.surname + this.name) 

}

+0

같은 문제 : http://stackoverflow.com/q/27327408/218196 –

답변

1

. 카운트가있는 것은 .입니다. 이것은 this.surname은 물론 "성"함수 자체 인 "hi"함수의 "성"속성을 나타냅니다.

나는 당신이 원하는 것처럼 구조를 설정하는 좋은 방법을 생각할 수 없다. 프로토 타입에는 하나의 "hi"기능 만 있습니다. 뾰족한 이미 핵심 질문에 대답 좋은 일을 한 것처럼

var test = function(name, surname){ 
    function hi(name) { 
     console.log("hi " + this.name) 
    } 
    function surname(){ 
     console.log("hi " + this.surname + this.name) 
    } 

    this.name = name; 
    this.surname = surname; 
    this.hi = hi; 
    this.hi.surname = surname.bind(this); 
} 
1

것은, 내가 단지를 추가 할 것입니다 : 당신이 각 구성 개체에 대한 별개의 "안녕하세요"속성, 너무 바운드 "성"함수를 만들 수도있을 것 같군요 this을 다루는 가장 쉬운 방법은 to not deal with it at all입니다.

function createTest(name, surname){ 
    var test = { name: name, surname: surname }; 

    test.hello = function(){ 
     console.log("hello " + test.name); 
    } 

    test.hi = function(){ 
     console.log("hi " + test.name); 
    } 

    test.hi.surname = function(){ 
     console.log("hi " + test.surname + ' ' + test.name); 
    } 

    return test; 
} 


var hii = function(){ 

    var x = createTest("kevin", "vanhove"); 

    x.hello(); 
    x.hi.surname(); 

}() 

http://jsfiddle.net/x4gdzahp/

다음은 위의 링크 된 기사에서 테이크 아웃입니다 :

내가 상당히 큰 자바 스크립트 응용 프로그램이 방법을 구축 한 팀에서 일했다. 우리는 아마 수 천개의 코드베이스 전체에서이 코드를 10 번 사용 했었습니다.

왜이 방법이 성공적 이었습니까? 첫째, 자바 스크립트에서 작동하는 방식과 관련된 미묘한 문제를 회피 할 수있었습니다. 더 이상 jQuery에 대한 혼란이 반복되어 다시 반복되는 것에 바인딩됩니다. 둘째, 생성자 함수 내에서 임시로 자체 유형을 작성하는 기능은 매우 강력합니다. 그것은 당신에게 다중 상속의 유용한 부분을 제공하지만, 관련된 다이아몬드 의존 문제는 없습니다. 마지막으로, 가장 큰 승리는 모든 유형의 API에 대한 세분화 된 컨트롤이었습니다. 모든 비공개 기능이 생성자 함수의 종료 내에서 안전하게 숨겨져있었습니다. 이것이 큰 코드베이스 팀에서 일하는 우리 성공의 중요한 이유라고 생각합니다.

+0

네,하지만이 경우에 당신이 프로토 타입의 혜택을 잃게됩니다. 내가 지금 설정 한 방법은 당신이 제안한 것과 정확히 같지만 프로토 타입을 사용하여 완료 할 수 있는지 궁금해했습니다. – kevinius