2015-11-27 3 views
0

Je suis novice en JavaScript et j'apprends le pop, le push, le shift et le unshift. J'essaie d'avoir 3 films, montrez-en 4 à différents moments. Cependant, mon .display(); La fonction ne montre rien. Je reçois une erreurAffichage Javascript(); pas de pop, de push, de décalage, de shift?

Uncaught TypeError: ArrayOfMovies.push is not a function 

Je crois qu'il va être le même problème avec l'autre .display(); élément.

function Movie(title, genre, rating, price, img) { 
    this.title = title; 
    this.genre = genre; 
    this.rating = rating; 
    this.price = price; 
    this.image = img; 
    this.display = displaymovie; 
} 

function displaymovie() { 
document.write("<blockquote style='text-align:left; font-size:15px; font-family: Arial, sans-sherif; font-weight:600; float:left; padding-left: 20px; padding-right:40px; padding-top:40px; color:#C58917;'>Title:" + this.title + "<br>"); 
document.write("Genre:" + this.genre + "<br>"); 
document.write("Rating:" + this.rating + "<br>"); 
document.write("Price:" + this.price + "</blockquote><br>"); 
document.write("<span><IMG float:'right' SRC='" + this.image + "' style='width:138px; height:158px;'>" + "<BR><BR>"); 
} 

var movieone = new Movie(" Avengers the age of Ultron", " Action/Adventure", " 8.0/10.0", " $9.99", "Labs_Images/Avg_Ultron.jpg"); 
var movietwo = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99, ", "Labs_Images/Tmrr_land.jpg"); 
var moviethree = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99", "Labs_Images/MM_road.jpg"); 

var ArrayOfMovies = new Movie(); 
ArrayOfMovies.push(movieone); 
ArrayOfMovies.push(movietwo); 
ArrayOfMovies.push(moviethree); 
var MoviesAll = Movie.push(); 
    MoviesAll.display(); 

     document.write("<br> <br>", "<h2>Next</h2>", "<br> <br>"); 

     var MovieAll = ArrayOfMovies.pop(); 
     MovieAll.display(); 
     document.write("<br> <br>", "<h2>Next2</h2>", "<br> <br>"); 

     var MovieAll2 = ArrayOfMovies.pop(); 
     MovieAll2.display(); 
     document.write("<br> <br>", "<h2>Next3</h2>", "<br> <br>"); 

     var MovieAll3 = ArrayOfMovies.unshift('movietwo'); 
     var MovieAll4 = ArrayOfMovies.pop(); 
     MovieAll4.display(); 
     document.write("<br> <br>", "<h2>Next4</h2>", "<br> <br>"); 

     var MovieAll5 = ArrayOfMovies.push('moviethree'); 
     var MovieAll6 = ArrayOfMovies.shift(); 
     MovieAll6.display(); 
+0

'var = ArrayOfMovies nouveau film(); '==>' var ArrayOfMovies = []; ' – Tushar

+0

Je l'ai changé var ArrayOfMovies = []; ne fonctionne toujours pas. – Sow

+0

'var MoviesAll = Movie.push()' - 'Movie' Je suppose que c'est une fonction de constructeur d'objet, ce qui signifie qu'il n'y a pas de méthode' .push() 'dessus. Qu'est-ce que 'MoviesAll' est censé égaler exactement? – Sam

Répondre

0

Je pense que quelque chose comme ceci est ce que vous recherchez à droite:

function Movie(title, genre, rating, price, img) { 
 
    this.title = title; 
 
    this.genre = genre; 
 
    this.rating = rating; 
 
    this.price = price; 
 
    this.image = img; 
 
} 
 

 
// Just a better way to add methods to the objects prototype 
 
Movie.prototype.display = function() { 
 
    document.write("<blockquote style='text-align:left; font-size:15px; font-family: Arial, sans-sherif; font-weight:600; float:left; padding-left: 20px; padding-right:40px; padding-top:40px; color:#C58917;'>Title:" + this.title + "<br>"); 
 
    document.write("Genre:" + this.genre + "<br>"); 
 
    document.write("Rating:" + this.rating + "<br>"); 
 
    document.write("Price:" + this.price + "</blockquote><br>"); 
 
    document.write("<span><IMG float:'right' SRC='" + this.image + "' style='width:138px; height:158px;'>" + "<BR><BR>"); 
 
}; 
 

 
var movieone = new Movie(" Avengers the age of Ultron", " Action/Adventure", " 8.0/10.0", " $9.99", "Labs_Images/Avg_Ultron.jpg"); 
 
var movietwo = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99, ", "Labs_Images/Tmrr_land.jpg"); 
 
var moviethree = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99", "Labs_Images/MM_road.jpg"); 
 

 
// Creates an array for the movies 
 
var ArrayOfMovies = []; 
 

 
// Pushes some movies 
 
ArrayOfMovies.push(movieone); 
 
ArrayOfMovies.push(movietwo); 
 
ArrayOfMovies.push(moviethree); 
 

 
document.write("<br> <br>", "<h2>Next</h2>", "<br> <br>"); 
 

 
// Proper pop() 
 
var movie = ArrayOfMovies.pop(); 
 
movie.display(); 
 
document.write("<br> <br>", "<h2>Next2</h2>", "<br> <br>"); 
 

 
// Proper shift() 
 
movie = ArrayOfMovies.shift(); 
 
movie.display(); 
 
document.write("<br> <br>", "<h2>Next3</h2>", "<br> <br>"); 
 

 
// Proper push() and pop() 
 
ArrayOfMovies.push(movietwo); 
 
movie = ArrayOfMovies.pop(); 
 
movie.display(); 
 
document.write("<br> <br>", "<h2>Next4</h2>", "<br> <br>"); 
 

 
// Proper unshift() and shift() 
 
ArrayOfMovies.unshift(moviethree); 
 
movie = ArrayOfMovies.shift(); 
 
movie.display();

+0

Je vois que vous avez sorti l'objet this.display = displaymovie; de la fonction Film (titre, genre, note, prix, img). et vous avez créé Movie.prototype.display = function() pourquoi? Merci! – Sow

+1

FYI: correction à la fois movie.display(); manquait le point-virgule pour le fermer. Ainsi que Movie.prototype.display = function() { }; Merci! Maintenant, ça fonctionne parfaitement! – Sow

+0

La raison pour laquelle j'ai fait cela était parce qu'il n'y avait pas besoin d'avoir cela comme une fonction globale. De plus, il est préférable de placer des méthodes (fonctions sur un objet) sur le prototype plutôt qu'à l'intérieur de la fonction constructeur. – Sam

0

@torazaburo vous devez avoir des points-virgules, car fait partie du langage de programmation JavaScript. Si vous n'avez pas JavaScript, insérez automatiquement un point-virgule. Consultez ce blog: - JavaScript Semicolon Insertion: Every you need to know. Il vous en dit plus sur les règles. Dans certains cas, le point-virgule peut également être omis.

0

Après avoir lu un commentaire Sam je figure sur la façon dont il a besoin plus facile:

var movie = ArrayOfMovies[ArrayOfMovies.length - 3]; 
movie.display(); 
var movie = ArrayOfMovies[ArrayOfMovies.length - 2]; 
movie.display(); 
var movie = ArrayOfMovies[ArrayOfMovies.length - 1]; 
movie.display(); //now the pushed are all dispayled! 

Voici le Javascript complet après mes corrections --->

<script type="text/javascript"> 
function Movie(title, genre, rating, price, img) { 
    this.title = title; 
    this.genre = genre; 
    this.rating = rating; 
    this.price = price; 
    this.image = img; 
} 

// Just a better way to add methods to the objects prototype 
Movie.prototype.display = function() { 
    document.write("<blockquote style='text-align:left; font-size:15px; font-family: Arial, sans-sherif; font-weight:600; float:left; padding-left: 20px; padding-right:40px; padding-top:40px; color:#C58917;'>Title:" + this.title + "<br>"); 
    document.write("Genre:" + this.genre + "<br>"); 
    document.write("Rating:" + this.rating + "<br>"); 
    document.write("Price:" + this.price + "</blockquote><br>"); 
    document.write("<span><IMG float:'right' SRC='" + this.image + "' style='width:138px; height:158px;'>" + "<BR><BR>"); 
}; 

var movieone = new Movie(" Avengers the age of Ultron", " Action/Adventure", " 8.0/10.0", " $9.99", "Labs_Images/Avg_Ultron.jpg"); 
var movietwo = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99, ", "Labs_Images/Tmrr_land.jpg"); 
var moviethree = new Movie(" The Age of Adaline", " Drama/Romance", " 6.7/10.0", " $8.99", "Labs_Images/MM_road.jpg"); 




document.write("<br> <br>", "<h2>Next</h2>", "<br> <br>"); 
// Creates an array for the movies 
var ArrayOfMovies = []; 

// Pushes some movies 
ArrayOfMovies.push(movieone); 
ArrayOfMovies.push(movietwo); 
ArrayOfMovies.push(moviethree); 

// Pushes some movies display 
var movie = ArrayOfMovies[ArrayOfMovies.length - 3]; 
movie.display(); 
var movie = ArrayOfMovies[ArrayOfMovies.length - 2]; 
movie.display(); 
var movie = ArrayOfMovies[ArrayOfMovies.length - 1]; 
movie.display(); 
document.write("<br> <br>", "<h2>Next2</h2>", "<br> <br>"); 

// Proper pop() 
var movie = ArrayOfMovies.pop(); 
movie.display(); 
document.write("<br> <br>", "<h2>Next3</h2>", "<br> <br>"); 

// Proper shift() 
movie = ArrayOfMovies.shift(); 
movie.display(); 
document.write("<br> <br>", "<h2>Next4</h2>", "<br> <br>"); 

// Proper push() and pop() 
ArrayOfMovies.push(movietwo); 
movie = ArrayOfMovies.pop(); 
movie.display(); 
document.write("<br> <br>", "<h2>Next5</h2>", "<br> <br>"); 

// Proper unshift() and shift() 
ArrayOfMovies.unshift(moviethree); 
movie = ArrayOfMovies.shift(); 
movie.display(); 
</script> 
+0

@sam Merci beaucoup! – Sow

+0

@torazaburo bien les règles sont une sorte d'astuce, mais quand je ai publié dans le serveur pour regarder et l'ouvrir sur Google Chrome. J'ai vu la notification dans la console de commande des points-virgules manquants. Après, je ne sais pas comment cela a fonctionné pour vous sans problèmes. – Sow