leaflet.js Reading 's, tôi tình cờ gặp một phương pháp với dòng này mà tôi không hoàn toàn hiểu:Nhiều bài tập var a = b = b || {} Trong mã javascript
var events = this._leaflet_events = this._leaflet_events || {};
mà có thể được đơn giản hóa như
var a = b = b || {};
Từ những gì tôi hiểu hướng dẫn này là một chuyển nhượng thuận tay trái đó là liên kết phù hợp có nghĩa là đầu tiên, JavaScript sẽ chạy
b = b || {} //if b exists, returns b, else return an empty object
, sau đó
a = b // returns the output of the preceding instruction
Điều này không có ý nghĩa với tôi. Tại sao không viết thay vì:
a = b || {};
Full bối cảnh:
addEventListener: function(/*string*/ type, /*function */ fn, /*(optional) object*/ context){
var events = this._leaflet_events = this._leaflet_events || {};
events[type] = events[type] || {};
events[type].push({
action: fn,
context: context || this
});
return this;
}
tôi nghi ngờ một thủ thuật tham khảo vì tôi không thấy như thế nào this._leaflet_events
được sửa đổi bởi phương pháp khác.
Suy nghĩ về nó, viết var a = b = b || {}
được thực sự là một mẹo để gán var a
một tham chiếu đến b
, dù b
được định nghĩa hay không. Sửa đổi a
hiện đang sửa đổi b
.
Quay lại Leaflet. Với
var events = this._leaflet_events = this._leaflet_events || {};
this._leaflet_events
hoặc tồn tại hoặc được khởi tạo để {}
. events
được gán this._leaflet_events
bằng cách tham chiếu. Giá trị của tham chiếu có thể là {}
nhưng vẫn là this._leaflet_events
đang được sửa đổi khi sửa đổi events
.
Ngược lại, viết
var events = this._leaflet_events || {};
sẽ là một sai lầm, vì nếu this._leaflet_events
không được định nghĩa, events
bây giờ sẽ trỏ đến một đối tượng mới được tạo ra có giá trị sẽ được {}
. Sửa đổi events
sẽ thay đổi đối tượng mới nhưng nó sẽ không thay đổi giá trị của this._leaflet_events
.
Cùng một giá trị xuất hiện, tham chiếu khác nhau. Đây là điều.
FYI, 'this._leaflet_events' là khác nhau hơn' this._leaflet. sự kiện'. –
Sai lầm của tôi, tôi đã chỉnh sửa bài đăng – cedricbellet