Является ли этот объектно-ориентированный JavaScript?

Я использую следующий JavaScript, который, я считаю, является Object Oriented. Другие не согласны с тем, что это объектно-ориентированный.

window.onload = function () {
var myphotos;
var currentImage;
var totalImageCount;

function initSlideImages(){
    myphotos = new Array (
            "slide_image_1",
            "slide_image_2",
            "slide_image_3",
            "slide_image_4",
            "slide_image_5"
        );
    currentImage = 1;
    totalImageCount = myphotos.length;

}

initSlideImages(); // Initialise slideshow

function nextPhoto(){
    currentImage++;
    if (currentImage > totalImageCount) {
        currentImage = 1;
    }
    var theImage = document.getElementById("slide_image");
    if (theImage != null){
        theImage.src = "images/portfolio/" + theImage.id + "_" + currentImage + ".jpg";
    }
}

function previousPhoto(){
    currentImage--;
    if (currentImage == 0){
        currentImage = totalImageCount;
    }
    var theImage = document.getElementById("slide_image");
    if (theImage != null){
        theImage.src = "images/portfolio/" + theImage.id + "_" + currentImage + ".jpg";
    }
}

var slide_prev = document.getElementById("slide-prev");
if (slide_prev != null){
    slide_prev.onclick = function() {
        previousPhoto();
    }
}

var slide_next = document.getElementById("slide-next");
if (slide_next != null){
    slide_next.onclick = function() {
        nextPhoto();
    }
}

}

Согласитесь ли вы, что это объектно-ориентированный JavaScript? Я считаю, что это так. Существуют функции конструктора (например, функция Person () { } var person1 = new Person (); var person2 = new Person (); ) и объекты литерала нотации (например, myphotos, currentImage). «slide_prev» и «slide_next» - это методы, насколько мне известно из моего понимания OO JS.

Я прав, или мне нужно пересмотреть объектно-ориентированный JavaScript 101?

javascript,oop,object,

-3

Ответов: 4


3

Это традиционный JavaScript, никак не связанный с OOJS. OOJS создает новые объекты и функции-члены. Примером OOJS может быть:

var myObject = {  

};

Или что-то вроде этого:

function myObject(){  
    this.iAm = 'an object';  
    this.whatAmI = function(){  
        alert('I am ' + this.iAm);  
    };  
};

Вот как вы определяете методы:

var myObject = {  
    iAm : 'an object',  
    whatAmI : function(){  
        alert('I am ' + this.iAm);  
    }  
}

Или буквальная версия выглядит так:

initSlideImages

Рекомендации

  1. Введение в объектно-ориентированный JavaScript - MDN
  2. Основы объектно-ориентированного JavaScript

3

Существуют функции конструктора (например, initSlideImages)

Функция initSlideImagesне используется как конструктор.

и объекты с буквальной нотацией (например, myphotos, currentImage).

Это не литералы в том смысле, о котором я думаю. Это просто старые глобальные переменные. И даже если бы они были, это не имеет особого отношения к ООП в JavaScript.

«slide_prev» и «slide_next» - это методы, насколько мне известно из моего понимания OO JS.

Это не методы.

Я прав, или мне нужно пересмотреть объектно-ориентированный JavaScript 101?

Ты довольно далек от права. Ни одна из терминов в вашем посте не используется точно. Да, вы должны начать сначала.


2

Ваш код выглядит более процедурным, чем объектно-ориентированным. Объектно-ориентированная система часто подразумевает инкапсуляцию и наследование. В объектно-ориентированном JavaScript ваш код обычно выглядит примерно так:

// Constructor
function Slider(photos) {
  this.photos = photos;
  this._init();
}

// Methods
Slider.prototype._init = function() {
  // grab selectors, add events, initialization logic
};

Slider.prototype.count = function() {
  return this.photos.length;
};

Slider.prototype.next = function() {
  //...
};

Slider.prototype.prev = function() {
  //...
};

var photos = [
  "slide_image_1",
  "slide_image_2",
  "slide_image_3",
  "slide_image_4",
  "slide_image_5"
];
var slider = new Slider(photos);

slider.next(); // go to next slide

0

Это не объектно-ориентированный JS. Нет экземпляра объекта с использованием «нового» оператора. Не существует свойств, определенных для функции конструктора типа «как».

Реализованный объектно-ориентированный код выглядит следующим образом:

function SlideImages(){
    this.myphotos = new Array (
            "slide_image_1",
            "slide_image_2",
            "slide_image_3",
            "slide_image_4",
            "slide_image_5"
        );
    this.currentImage = 1;
    this.totalImageCount = this.myphotos.length;

}

//Object creation
var slideImages = new SlideImages(); 

//accessing object properties
console.log(slideImages.currentImage) //output:1
JavaScript, ООП, объект,
Похожие вопросы