2016-02-13 21 views
5

Ông có thể giải thích lý do tại sao tôi nhận đượcField, getter và setter có cùng tên

Uncaught RangeError: Maximum call stack size exceeded

trong ví dụ này. Chuỗi hành động là gì?

"use strict"; 

let myClass = class myClass{ 
    constructor(name){ 
    this.name = name; 
    } 
    get name() { return this.name; } 
    set name(name){ this.name = name; } 
} 

let myObj = new myClass("John"); 

Trả lời

2

Bạn đang gọi setter từ setter, loop vô hạn.

set name(name) { 
    this.name = name; // <-- `this.name` calls the `set`ter again 
} 

Bạn nên sử dụng một biến sao lưu khác nhau tên của một số loại:

"use strict"; 
 

 
let myClass = class myClass { 
 
    constructor(name) { 
 
    this.name = name; 
 
    } 
 

 
    get name() { 
 
    return this._name; 
 
    } 
 

 
    set name(name) { 
 
    this._name = name; 
 
    } 
 
} 
 

 
let myObj = new myClass("John"); 
 

 
console.log(myObj);

Trước sự ngạc nhiên của tôi it's not trivial to have variables private to a class.

+0

Tôi hiểu rồi, cảm ơn sự giúp đỡ –

Các vấn đề liên quan