如何在对象方法中 select 一个 JavaScript 对象数组

How do I select a JavaScript Object Array within an Object Method

如何从我的 randomImage.imagePicker 方法 select randomImage.images 数组中的字符串?

(function() {

var randomImage = {

        images : [
                'http://placehold.it/100x100',
                'http://placehold.it/200x200',
                'http://placehold.it/300x300',
                'http://placehold.it/400x400'
                ],//images Array
        imagePicker : function () {
                return console.log(randomImage.images[2]);
                }()//imagePicker Method

}//randomImage Object

})()

我在控制台中收到以下错误:

Uncaught TypeError: Cannot read property 'images' of undefined

前提是您只想 return 来自 images 数组的随机图像:

DEMO

imagePicker : function () {
  var index = Math.floor(Math.random() * randomImage.images.length);
  return randomImage.images[index];
}

可以使用索引仅返回特定图像:

imagePicker : function () {
  // index 0 returns 'http://placehold.it/100x100'
  return randomImage.images[0];
}

或者如果您想指定要获取的随机图像的索引:

imagePicker : function (idx) {
  return randomImage.images[idx];
}

randomImage.imagePicker(1) 将 return http://placehold.it/200x200

this 是神奇的词:

    (function() {

    var randomImage = {

            images : [
                    'http://placehold.it/100x100',
                    'http://placehold.it/200x200',
                    'http://placehold.it/300x300',
                    'http://placehold.it/400x400'
                    ],//images Array
            imagePicker : function () {
                    alert(this.images[2]);
                    }//imagePicker Method

    }//randomImage Object

    randomImage.imagePicker();

 })();

请注意 randomImage 变量在自动函数之外不可用!

Fiddle here

I get the following error in the console: Uncaught TypeError: Cannot read property 'images' of undefined

问题是函数定义后有 ():

imagePicker : function () {
    return console.log(randomImage.images[2]);
}()//imagePicker Method
 ^^

这将立即调用 函数并将其return 值赋给imagePicker。但是此时randomImage还没有初始化。它的值仍然是 undefined,这就是您收到该错误的原因。

删除括号以分配函数本身(我假设这就是你想要做的):

imagePicker : function () {
    return console.log(randomImage.images[2]);
}