2009-12-28 2 views

답변

2

이전 대답은 불완전합니다.

첫 번째 예제에서는 클라이언트 클래스의 특정 인스턴스에만 메서드를 추가합니다. 두 번째 예제는 모든 클래스 프로토 타입에 메서드를 추가합니다.

이러한 구분은 일부 사용 사례에서 매우 중요합니다.

예를 들어 회의실에 연결하는 클라이언트가 논리로 작성된 관리 권한을 가지고있는 경우 onConnect의 클라이언트 인스턴스에서 메소드를 관리자의 사용자 클라이언트에만 추가하고 그렇지 않은 경우 각 관리 방법에서 메소드가 클라이언트인지 확인해야합니다 여부 (추한 것이다)

샘플 :

application.isAdminUser = function(cParams) { 
    if (cParams.username == 'admin') { 
     return true; 
    } else { 
     return false; 
    } 
} 

/* bad - people can simulate clients */ 
application.onConnect = function(client, cParams) { 
    client.disconnectUser = function(userId) { application.myDisconnect(userId); }; 
    client.allClientsMethod = function() { }; 
} 

/* good */ 
application.onConnect = function(client, cParams) { 
    if(this.isAdminUser(cParams)) { 
     client.disconnectUser = function(userId) { application.myDisconnect(userId); }; 
    } 
    // this following is applied to all connecting clients 
    client.allClientsMethod = function() { }; 
    // and can be done also by: 
    // Client.prototype.allClientsMethod = function() { }; 
} 

당신은 악의적 인 사람을 상상할 수 있다면 당신은 그 중 하나를 분리 할 수 ​​있도록 해주는 클라이언트를 위조 할 수있는 내부의 disonnectUser을 넣어하지 않는 경우 사용자.

이 정보가 도움이되기를 바랍니다.

1

첫 번째 예에서는 만들어진 클라이언트 개체에 함수를 추가합니다.

두 번째 예는 onConnect가 실행될 때 생성 될 클래스의 프로토 타입에 함수를 추가합니다.

실제로 동일한 결과를 얻으려면 두 가지 방법이 있습니다.

만약 내가 더 빨리 추측해야한다면, 제 2 예제를 사용하면 클래스 정의에 함수를 추가하기 때문에 조금 더 빨라질 것이라고 추측 할 수 있습니다.

관련 문제