通常,您在控制檯中收到的錯誤不是謊言。所以讓我們打破你的對象,看看有什麼可能導致錯誤。
var roomName = 'room_' + $(this).data('room-id');
beds_required_obj.roomName.single_beds_required = ...
現在上面的代碼首先假定beds_required_obj
是一個存在的對象。我們可以通過註釋中看到,這的確是事實,因爲你使用:
var beds_required_obj = {};
現在,因爲這個對象存在,你可以打電話beds_required_obj.anything_here
,這將是有效的代碼。但是,您嘗試訪問的孩子可能不存在。
接下來你寫了beds_required_obj.roomName
。現在,這試圖訪問名爲'roomName',而不是'room_id'的子對象。爲了訪問您存儲在roomName
變量中的動態名稱,您需要使用方括號。因此:
beds_required_obj[roomName]
這將返回動態創建的房間名稱的子對象。
現在取決於roomName
究竟是什麼(例如它可能是'room_123'),這個子對象也可能不存在。如果它不存在,則任何訪問此對象的子項的嘗試都將返回您的錯誤。例如,看一下下面的代碼:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// this line below will throw an error because the room_1234 child object does not exist
beds_required_obj[roomName].single_beds_required = 2;
正在發生的事情是,你正在試圖訪問single_beds_required
作爲一個未定義的對象的孩子。爲了使這項工作,你就需要更改上面的代碼,包括一個額外的行:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// now create the room child object
beds_required_obj[roomName] = {};
// now this line will work, as the room is a valid object that can have children assigned to it.
beds_required_obj[roomName].single_beds_required = 2;
注意:如果你想要做這樣的事情更可讀的代碼(IMO),那麼我會用:
breds_required_obj[roomName] = {
single_beds_required: 2
};
你幾乎擁有它。使用'beds_required_obj [roomName] .single_beds_required = ...' –
@Matt Wey ....是的,我曾試過。返回此錯誤: TypeError:beds_required_obj [roomName]未定義 – Nick
首先使用'beds_required_obj = {};'初始化對象;' – Adder