Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是面向对象的JavaScript吗?_Javascript_Oop_Object - Fatal编程技术网

这是面向对象的JavaScript吗?

这是面向对象的JavaScript吗?,javascript,oop,object,Javascript,Oop,Object,我正在使用以下JavaScript,我认为它是面向对象的。其他人不同意这是面向对象的 window.onload = function () { var myphotos; var currentImage; var totalImageCount; function initSlideImages(){ myphotos = new Array ( "slide_image_1", "slide_image_2",

我正在使用以下JavaScript,我认为它是面向对象的。其他人不同意这是面向对象的

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吗?我相信是的。有构造函数,如initSlideImages和文字符号对象,如myphotos、currentImage。根据我对OO JS的理解,上一张幻灯片和下一张幻灯片是我所知道的方法


我是对的,还是我需要重温面向对象的JavaScript 101?

这是一个传统的JavaScript,与OOJS没有任何关系。OOJS创建新对象和成员函数。OOJ的一个例子是:

function Person() { }
var person1 = new Person();
var person2 = new Person();
或者像这样:

var myObject = {  

};
var myObject = {  
    iAm : 'an object',  
    whatAmI : function(){  
        alert('I am ' + this.iAm);  
    }  
}
// 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
这就是定义方法的方式:

function myObject(){  
    this.iAm = 'an object';  
    this.whatAmI = function(){  
        alert('I am ' + this.iAm);  
    };  
};
或者,文字版本如下:

var myObject = {  

};
var myObject = {  
    iAm : 'an object',  
    whatAmI : function(){  
        alert('I am ' + this.iAm);  
    }  
}
// 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
参考资料

有一些构造函数,比如initslidemages

函数initSlideImages未用作构造函数

和文字符号对象,如myphotos、currentImage

我想你指的不是字面意思。它们只是普通的全局变量。即使是这样,这与JavaScript中的OOP也没有多大关系

根据我对OO JS的理解,上一张幻灯片和下一张幻灯片是我所知道的方法

这些不是方法

我是对的,还是需要重温面向对象JavaScript 101


你太不对劲了。你文章中的术语没有一个用得准确。是的,您应该从头开始。

您的代码看起来更程序化,而不是面向对象。面向对象通常意味着封装和继承。在面向对象的JavaScript中,您的代码通常如下所示:

var myObject = {  

};
var myObject = {  
    iAm : 'an object',  
    whatAmI : function(){  
        alert('I am ' + this.iAm);  
    }  
}
// 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

这不是面向对象的JS。 没有使用“new”运算符进行对象实例化。没有为“类”构造函数定义属性

重构后的面向对象代码如下:

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

除了使用内置方法和属性外,我在上面没有看到任何与对象相关的内容。看起来更像是程序化的,而不是面向对象的。它似乎更像是一个框架。好了:@FelixKling-True。我应该说对象文字。