这是面向对象的JavaScript吗?
我正在使用以下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",
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。我应该说对象文字。