2016-06-30 14 views
7

Có thể sử dụng phép gán destructuring trong một hàm tạo của lớp JavaScript để gán các biến cá thể tương tự như cách bạn có thể thực hiện nó cho các biến bình thường không?Có thể hủy cấu trúc các biến cá thể/thành viên trong một hàm tạo JavaScript không?

Ví dụ sau hoạt động:

var options = {one: 1, two: 2}; 
var {one, two} = options; 
console.log(one) //=> 1 
console.log(two) //=> 2 

Nhưng tôi không thể có được một cái gì đó như sau để làm việc:

class Foo { 
    constructor(options) { 
    {this.one, this.two} = options; 
    // This doesn't parse correctly and wrapping in parentheses doesn't help 
    } 
} 

var foo = new Foo({one: 1, two: 2}); 
console.log(foo.one) //=> I want this to output 1 
console.log(foo.two) //=> I want this to output 2 
+2

Tôi nghĩ rằng nhiều câu hỏi chung là liệu có một biểu mẫu chuyển nhượng phá hủy cung cấp cho việc tạo các thuộc tính trên một đối tượng hiện có thay vì một bộ khởi tạo đối tượng hay không. – Pointy

+1

Dù sao luôn có 'Object.assign (điều này, tùy chọn);' – Pointy

+1

Điều đáng nói đến là bạn có thể áp dụng cùng một cú pháp bên ngoài các hàm tạo. Cho trước là hai đối tượng: 'let o = {a: 1, b: 2}, p = {};'. Deconstruct 'o' thành một ít phức tạp hơn' p' là một sự hòa bình của bánh: '({b: p.b} = o);' yields 'Object {b: 2}' cho 'p'. – ftor

Trả lời

6

Có nhiều cách để làm điều này. Người đầu tiên chỉ và assigns the properties of options to properties on this sử dụng được destructuring:

class Foo { 
    constructor(options) { 
    ({one: this.one, two: this.two} = options); 
    // Do something else with the other options here 
    } 
} 

các ngoặc thêm là cần thiết, nếu không động cơ JS có thể nhầm lẫn { ... } cho một đối tượng đen hoặc một tuyên bố khối.

thứ hai sử dụng Object.assign và destructuring:

class Foo { 
    constructor(options) { 
    const {one, two} = options; 
    Object.assign(this, {one, two}); 
    // Do something else with the other options here 
    } 
} 

Nếu bạn muốn áp dụng tất cả lựa chọn của bạn cho Ví dụ, bạn có thể sử dụng Object.assign mà không destructuring:

class Foo { 
    constructor(options) { 
    Object.assign(this, options); 
    } 
} 
+0

Cảm ơn @nils! Điều này thật đúng với gì mà tôi đã tìm kiếm. Giải pháp đầu tiên là ngắn gọn nhất và sử dụng một sự phá hủy cao hơn một chút mà bạn hoặc là đã biết hoặc nhanh chóng tìm ra khi đọc/chạy mã. The 2nd là rõ ràng nhất và rõ ràng nhất trong khi thứ 3 là rất tốt cho các trường hợp sử dụng bạn vạch ra. – Aaron

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