2016-07-02 8 views
2

삭제에도 불구하고 단지 게터을 가지고 속성을 설정할 수 없습니다 나는 내 클래스 중 하나에서 다음 게터 있습니다자바 스크립트 나 게터

get password(){ 
     if(this._public) return null; 

     var text = ""; 
     var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
     for (var i = 0; i < 10; i++) { 
      text += possible.charAt(Math.floor(Math.random() * possible.length)); 
     } 

     delete this.password; 
     return this.password = text; 
} 

더 첨부 세터가 없습니다합니다. 라인 return this.password = text에 나는이 오류를 얻을 :

Uncaught TypeError: Cannot set property password of # which has only a getter

그러나, 게터가이 시점에서 삭제되어야한다, 그리고 암호라는 프로퍼티가 없어야한다. 실제로 MDN의 페이지 here (페이지의 마지막 코드 스 니펫)에서 아이디어를 얻었습니다.

왜 이런 일이 발생하는지 알고 계십니까?

Chrome 51 및 Node.js (v6.0.0)에서 테스트되었습니다.

+0

글쎄, 당신은 바로 뭔가를 설정할 수 없습니다? 나는 그것을 실제로 설정하는 세터가 필요하다는 것이 꽤 분명하다고 생각한다. – Darkrifts

+1

@Darkrifts : 이것은 Ruby가 아니다. 속성은 데이터 속성 또는 접근 자 속성 중 하나 일 수 있습니다. 내가 올바르게 이해하면, OP는 접근 자 속성을 지우려고하므로 데이터 속성을 대신 넣을 수 있습니다. – Amadan

+0

비밀번호는 어떻게 수업에 저장됩니까? this._password? – skyline3000

답변

6

의견에서 말한 것처럼 거기에없는 것을 삭제할 수 없습니다. passworduser의 속성이 아니라 프로토 타입입니다. 그래서 delete user.password은 아무 것도하지 않습니다. user.password = "foo"을 수행하면 프로토 타입에 user 속성이 있으며 설정 할 수 없습니다.

대신 user 자체에 속성을 정의해야합니다 : 더 세터가없는 경우

class User { 
 
    get password() { 
 
    Object.defineProperty(this, "password", { 
 
     value: "foo" 
 
    }); 
 
    return this.password; 
 
    } 
 
}; 
 

 
var user = new User(); 
 
console.log(user.password);