Javascript 在使用之前,如何将初始数据分配给文本对象中的某些变量

Javascript 在使用之前,如何将初始数据分配给文本对象中的某些变量,javascript,object,Javascript,Object,我有一个文字对象,它做一些事情,这个对象必须在使用它的任何方法之前为变量分配一些初始数据 var slideshow = { slideshowBox: null, slideImages: null, slideImagesLen: 0, init: function(){ this.slideshowBox = document.getElementById('slideshow'); this.slideImages =

我有一个文字对象,它做一些事情,这个对象必须在使用它的任何方法之前为变量分配一些初始数据

var slideshow = {

    slideshowBox: null,
    slideImages: null,
    slideImagesLen: 0,

    init: function(){
        this.slideshowBox = document.getElementById('slideshow');
        this.slideImages = document.getElementById('images');
        this.slideImagesLen = this.slideImages.children.length;
    },
    show: function(){
        return this.slideImagesLen;
    }

};
但是问题是,当你使用它的任何一种方法时,你必须首先使用
init
方法,然后使用我可以使用任何其他方法,但是这种行为是不好的

slideshow.init()
console.log(slideshow.show());
我还尝试使用以下方法:

(function(){   
    var slideshow = {

        slideshowBox: null,
        slideImages: null,
        slideImagesLen: 0,

        init: function(){
            this.slideshowBox = document.getElementById('slideshow');
            this.slideImages = document.getElementById('images');
            this.slideImagesLen = this.slideImages.children.length;
        },
        show: function(){
            return this.slideImagesLen;
        }
    };
    slideshow.init();
})();
但是,存在一些错误,例如
this.slidemages为null
slideshow.show不是函数


我想要在使用任何方法之前自动调用
init
方法,而不需要手动调用它。

您应该尝试在这里使用带构造函数的原型继承

(function(){
  var Slideshow = function () {
    this.slideshowBox = document.getElementById('slideshow');
    this.slideImages = document.getElementById('images');
    this.slideImagesLen = this.slideImages.children.length;
  };

  Slideshow.prototype.show = function () {
    return this.slideImagesLen;
  };

  var slideShowInstance = new Slideshow();
  slideShowInstance.show();

})();
实际上,我会更进一步,使它更具可扩展性

  var Slideshow = function (slideShowId, images) {
    this.slideshowBox = slideShowId;
    this.slideImages = images;
    this.slideImagesLen = this.slideImages.children.length;
  };


  var slideShowId = document.getElementById('slideshow'),
      images = document.getElementById('images');

  var slideShowInstance = new Slideshow(slideShowId, images);

在这里,您应该尝试将原型继承与构造函数一起使用

(function(){
  var Slideshow = function () {
    this.slideshowBox = document.getElementById('slideshow');
    this.slideImages = document.getElementById('images');
    this.slideImagesLen = this.slideImages.children.length;
  };

  Slideshow.prototype.show = function () {
    return this.slideImagesLen;
  };

  var slideShowInstance = new Slideshow();
  slideShowInstance.show();

})();
实际上,我会更进一步,使它更具可扩展性

  var Slideshow = function (slideShowId, images) {
    this.slideshowBox = slideShowId;
    this.slideImages = images;
    this.slideImagesLen = this.slideImages.children.length;
  };


  var slideShowId = document.getElementById('slideshow'),
      images = document.getElementById('images');

  var slideShowInstance = new Slideshow(slideShowId, images);

在函数
幻灯片中调用
\u slideshow.init
后,尝试返回
对象
\u slideshow

var slides=函数(选项){
返回(函数(opts){
var|u slideshow=opts||{
幻灯片显示框:空,
slidemages:null,
slideImagesLen:0,
init:function(){
this.slideshowBox=document.getElementById('slideshow');
this.slidemages=document.getElementById('images');
this.slidemageslen=this.slidemages.children.length;
},
show:function(){
返回此。slidemageslen;
}
};
_slideshow.init();
返回对象。创建(\u幻灯片)
}(选项)
};
var slideshow=slides();
log(“slidemageslen:,slideshow.show(),“slideshow:,slideshow”)

调用函数
幻灯片中的
后,尝试返回
对象

var slides=函数(选项){
返回(函数(opts){
var|u slideshow=opts||{
幻灯片显示框:空,
slidemages:null,
slideImagesLen:0,
init:function(){
this.slideshowBox=document.getElementById('slideshow');
this.slidemages=document.getElementById('images');
this.slidemageslen=this.slidemages.children.length;
},
show:function(){
返回此。slidemageslen;
}
};
_slideshow.init();
返回对象。创建(\u幻灯片)
}(选项)
};
var slideshow=slides();
log(“slidemageslen:,slideshow.show(),“slideshow:,slideshow”)

有两种方法。例如:

var slideshow = {
        ...
    init: function () {
            ...
        return this;
    }
        ...
}.init();
或者,如果仍然过于手动,您可以简单地在对象文本中使用IIFE:

var slideshow = {
        ...
    init: (function init () {
            ...
        return init;
    }())
        ...
}

在这两种情况下,在创建对象之前必须存在引用的HTML元素。

有两种方法。例如:

var slideshow = {
        ...
    init: function () {
            ...
        return this;
    }
        ...
}.init();
或者,如果仍然过于手动,您可以简单地在对象文本中使用IIFE:

var slideshow = {
        ...
    init: (function init () {
            ...
        return init;
    }())
        ...
}


在这两种情况下,在创建对象之前,引用的HTML元素都必须存在。

谢谢,但不幸的是,这两种方法工作不正常,出现两个错误,
this.slidemages为null
slideshow未定义
@LionKing如果HTML元素存在,则它们不存在。如果在调用
show()
时它们可能不存在,则必须检查方法本身是否存在。这是你应用@LionKing后的代码结果。你应该问你需要什么,这篇文章回答了你的问题:“我想要任何自动调用init方法的方法”谢谢你的回答,但是数据是如何初始化的,仍然是
null
?我的问题的目标是如何将初始数据分配给变量。当应用您的答案时,变量仍然有空值。谢谢,但不幸的是,这两种方法工作不正常,出现两个错误,
this.slideImages是空的
slideshow是未定义的
@LionKing如果HTML元素存在,它们没有。如果在调用
show()
时它们可能不存在,则必须检查方法本身是否存在。这是你应用@LionKing后的代码结果。你应该问你需要什么,这篇文章回答了你的问题:“我想要任何自动调用init方法的方法”谢谢你的回答,但是数据是如何初始化的,仍然是
null
?我的问题的目标是如何将初始数据分配给变量。当应用您的答案时,变量仍然有空值。谢谢,但不幸的是,这两种方法工作不正常,出现两个错误,
this.slideImages是空的
slideshow是未定义的
@LionKing如果HTML元素存在,它们没有。如果在调用
show()
时它们可能不存在,则必须检查方法本身是否存在。这是你应用@LionKing后的代码结果。你应该问你需要什么,这篇文章回答了你的问题:“我想要任何自动调用init方法的方法”谢谢你的回答,但是数据是如何初始化的,仍然是
null
?我的问题的目标是如何将初始数据分配给变量。当应用你的答案时,变量仍然有空值。谢谢,但是你的答案有点复杂,因为它是嵌套的,不容易理解。@LionKing哪一部分理解有困难?谢谢你的努力,但是你的代码想法对我来说不清楚。谢谢,但是你的答案有点复杂,而且是嵌套的,不容易理解。@LionKing哪一部分理解有困难?谢谢你的努力,但是你的代码想法我不清楚。谢谢,但是你的答案有点复杂,而且是嵌套的,不容易理解。@LionKing哪部分理解有困难?谢谢你的努力,但是你的代码想法我不清楚。