2016-12-15 16 views
20

tôi bước vào biểu thức này trong Firefox và Chrome Dev Console và tôi tự hỏi tại sao nó có giá trị JavaScript:Không có dấu hai chấm sau tên thuộc tính trong khai báo đối tượng, nó có hợp lệ không?

var x = { a (b) {} }; 
console.log(x); 

x sau đó được thiết lập để một đối tượng với thuộc tính "a" có chứa một hàm gọi là "a" với một định danh đối số "b". Cú pháp JavaScript hợp lệ này như thế nào? Dấu hai chấm bị thiếu sau "a" và tôi không hiểu định nghĩa hàm.

+5

Ký hiệu đối tượng ngắn ES6 – vlaz

+1

'x' là đối tượng có hàm' a' với đối số có tên 'b' –

Trả lời

30

Đây là đường cú pháp ES6/ES2015 (Property shorthand). Với ES6:

const obj = { 
    a(b) { 
     // Shorthand method 
     // `this` context is `obj` 
    }, 
    c 
}; 

bằng

var obj = { 
    a: function a(b) { 

    }, 
    c: c 
}; 
+1

Tôi đặt tên này là phương thức viết tắt (vì khi bạn gọi thuộc tính này, hàm của nó sẽ nhận' này 'bối cảnh là' obj', được nêu ra). – Hydro

+1

Là trường hợp OP có, nhưng nói chung bạn không thể sử dụng dấu chấm phẩy cho bất kỳ tài sản, vì vậy tôi không thay đổi tên nó (tôi sẽ thêm một bình luận mặc dù). Cảm ơn bạn đã chỉnh sửa btw! – nicovank

+0

Lưu ý rằng có một sự khác biệt tinh tế. Trong đoạn đầu tiên của bạn, 'obj.a' không phải là hàm tạo. Trong đoạn thứ hai, 'obj.a' mới hoạt động như bình thường. –

5

Trong JavaScript, khi bạn viết:

var x = { a (b) {} }; 

Nó sẽ xem xét nó như là:

var x = { 
    a: function (b) { 

    } 
    } 

Ví dụ , bạn có thể kiểm tra và nó sẽ rõ ràng nghi ngờ của bạn:

var x = { a (b) { console.info('function called') } }; 
x.a(); 

này sẽ gọi hàm mà được gán cho tài sản của đối tượng ax.

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