2016-07-02 3 views
2

を削除するにもかかわらず、唯一のゲッターを持つプロパティを設定できません。Javascriptが私は私のクラスのいずれかで、次のゲッターを持っている私はゲッター

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

@ダークリフト:これは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);

関連する問題