1

次のコードがあります。

Javascript:

slideShow = {
     ImgsFolder: "images/",
     ImgsSrc: ['img.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg'],
     MainElem: document.getElementById('SlideShow'),
     ImgElem: (this.MainElem.firstElementChild) ? this.MainElem.firstElementChild : this.MainElem.firstChild
     doit: function(){
          for (i = 0; i < this.ImgsSrc.length; i++) {
               document.writeln(this.ImgsFolder + this.ImgsSrc[i] + "<br/>");
               }
       }

  }

variableの値を出力するとImgElem、エラーメッセージが表示this.MainElem is undefinedされ、最後の行に問題が表示されます。
コードのこの部分の何が問題なのかわからない

4

4 に答える 4

1

コメントで述べたように、表記自体の中からオブジェクトリテラル表記を介して作成されているオブジェクトを参照することはできません。

オブジェクトを参照する前に、オブジェクトを完全に作成する必要があります。

slideShow = {
     ImgsFolder: "images/",
     ImgsSrc: ['img.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg'],
     MainElem: document.getElementById('SlideShow')
}

slideShow.ImgElem = slideshow.MainElem.firstElementChild ||
                    slideshow.MainElem.firstChild

作成時にオブジェクトを参照するには、コンストラクター関数が必要です。

function SlideshowMaker() {
     this.ImgsFolder = "images/",
     this.ImgsSrc = ['img.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg'],
     this.MainElem = document.getElementById('SlideShow')

     this.ImgElem = this.MainElem.firstElementChild ||
                    this.MainElem.firstChild
}

 // use "new"----v----to create a new object
var slideshow = new SlideshowMaker()
于 2012-06-12T17:56:45.070 に答える
1

キーワードを使用するには、thisキーワードでオブジェクトをインスタンス化する必要がありますnew。それ以外の場合、この場合、キーワードはオブジェクトthisを指します。window

于 2012-06-12T17:49:33.063 に答える
0

などのオブジェクトリテラルを使用する場合{ key: value, ... }、オブジェクトは、ブロック全体が解析/実行された後に実際に作成されます。

var a = {
  // a is not defined here
  key: value
};
// it is defined here

thisまた、作成しようとしているオブジェクトへの参照として使用することはできません。thisオブジェクトのメソッド(オブジェクトにバインドされているか、そのコンテキストで実行される関数)でのみ使用できます。

2つのオプションがあります。

1.)次のようなゲッター関数を作成する必要があります

var a = {
  b: value,
  c: function () { return this.b.c; }
};

アクセスするためにそれを呼び出しますb.ca.c()

ImgElem2.)この場合のより良い方法は、オブジェクトが実際に作成された後にプロパティを定義することです。

var slideShow = {
 MainElem: document.getElementById('SlideShow')
};
slideShow.ImgElem = slideShow.MainElem.firstElementChild || slideShow.MainElem.firstChild;

slideShowの代わりにの使用法に注意してくださいthis

于 2012-06-12T17:57:40.577 に答える
-3

多分あなたはいくつかの括弧を置き忘れましたか?

var slideShow = {
ImgsFolder: "images/",
ImgsSrc: ['img.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg'],
MainElem: document.getElementById('SlideShow'),
ImgElem: (this.MainElem.firstElementChild ? this.MainElem.firstElementChild :   this.MainElem.firstChild)
}
于 2012-06-12T17:47:51.627 に答える