2017-07-30 108 views
3

我正在通過一本JavaScript書,我正在研究用Literal Notation創建對象。在同一頁面上的兩個相似的對象

我給這個代碼:

var hotel = { 
name: 'Quay', 
rooms: 40, 
booked:25, 
checkAvailability: function() { 
return this.rooms - this.booked; 
} 
} 

var hotelName = document.getElementById('hotel-name'); 
hotelName.textContent = hotel.name; 

var freeRooms = document.getElementById('free-rooms'); 
freeRooms.textContent = hotel.checkAvailability(); 

我明白這完美的罰款。

然後告訴我'如果在同一頁面上有兩個對象,您可以使用相同的符號創建每個對象,但將它們存儲在具有不同名稱的變量中。

我試圖在JSFiddel中創建這個,但似乎失敗了,我不知道爲什麼。任何人都可以提出一個簡單的例子和​​解釋。這真的很有幫助。

編輯::我不知道它是否是告訴我,我會寫entirly另一個對象或將鏈接到名稱/房等現有對象內部的一些變量..提前

感謝。

參考:約翰·達克特 - 的JavaScript和JQuery

+0

請顯示你已經嘗試過。應該像那句話所說的那樣工作,即:'var obj = {},obj2 = {}' – tymeJV

+0

它可能在書本身就像答案一樣。也許在這之前你錯過了一些東西。或者還沒有提前閱讀。無論如何,這個問題的含義並不十分清楚。 –

+0

對不起,我不是說它沒有工作,我只是想找一個關於它如何寫的探索,我只是努力去理解這個探索。 –

回答

2

您可以使用此爲一類,這樣你就可以通過鍵入new Hotel(name, rooms, booked)

function Hotel(name, rooms, booked) { 
 
    this.name = name; 
 
    this.rooms = rooms; 
 
    this.booked = booked; 
 
} 
 

 
Hotel.prototype = { 
 
    checkAvailability: function() { 
 
    return this.rooms - this.booked; 
 
    } 
 
} 
 

 
var hotel = new Hotel('Quay', 40, 25); 
 
var hotel2 = new Hotel('Hotel2', 50, 45); 
 

 
var hotelName = document.getElementById('hotel-name-1'); 
 
hotelName.textContent = hotel.name; 
 

 
var freeRooms = document.getElementById('free-rooms-1'); 
 
freeRooms.textContent = hotel.checkAvailability(); 
 

 
var hotelName = document.getElementById('hotel-name-2'); 
 
hotelName.textContent = hotel2.name; 
 

 
var freeRooms = document.getElementById('free-rooms-2'); 
 
freeRooms.textContent = hotel2.checkAvailability();
<div id='hotel-name-1'></div> 
 
<div id='free-rooms-1'></div> 
 
<br> 
 
<div id='hotel-name-2'></div> 
 
<div id='free-rooms-2'></div>

1

好重用酒店的對象,你可以存儲結構相同,但值不同的對象。讓我包裝一下你的例子中的物體成泵出不同酒店的功能解釋,具有相同的結構

function hotel(name, rooms, booked) { 
 
    var hotel = { 
 
    name: name, 
 
    rooms: rooms, 
 
    booked: booked, 
 
    checkAvailability: checkAvailability 
 
    }; 
 

 
    return hotel; 
 
} 
 

 
//lets seperate the checkAvailability function from the function so it can be reused. 
 
function checkAvailability() { 
 
    return this.rooms - this.booked; 
 
} 
 

 
var hotel1 = hotel("quay", 40, 25); 
 
var hotel2 = hotel("Ocean View", 50, 20); 
 
console.log(hotel1); 
 
console.log(hotel2); 
 
console.log(hotel1.checkAvailability()); 
 
console.log(hotel2.checkAvailability());

+0

歡迎來自Mouser的快速問題,當您寫入......名稱:名稱或房間:房間時,Javascript會自動使用參數的參數替換第二個「名稱」或「房間」? Jope這是有道理的,對於所有這些術語來說都是新的.. –

+0

是的,它接受函數中提供的參數,並將它們分配給對象。最後它將對象返回給具有指定屬性的變量。 – Mouser

0

和使用酒店通過ES6類不同的情況下多了一個例子:

class Hotel { 
    constructor(name, rooms, booked) { 
    this.name = name; 
    this.rooms = rooms; 
    this.booked = booked; 
    } 

    get checkAvailability() { 
    return this.rooms - this.booked; 
    } 
} 

const hotelOne = new Hotel('First', 44, 21), 
     hotelTwo = new Hotel('Second', 21, 5); 
console.log(hotelOne.checkAvailability); 
console.log(hotelTwo.checkAvailability); 
相關問題