# Why I get \`undefined\` when I console.log \`image(img, x, y)\` but get a p5 object when i console.log \`text(text, x, y)\`?

**URL:** <https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073>\
**Category:** Beginners\
**Created:** [May 26, 2023, 10:36am UTC](https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073 "2023-05-26T10:36:42Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![WaningJupiter](https://avatars.discourse-cdn.com/v4/letter/w/5e9695/32.png) [@WaningJupiter](https://discourse.processing.org/u/WaningJupiter)\
**Post date:** [May 26, 2023, 10:36am UTC](https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073/1 "2023-05-26T10:36:42Z")

</div>

Hello community,  
my question is described in the title

```auto
let img;
function preload(){
  img = loadImage('https://placehold.co/600x400'); 
}

function setup() {
  createCanvas(600, 400);
  background(220);

  let word = text('this is a text', 0,0);
   console.log(word); // will get a p5 object
 let picture = image(img, 0,0); 
   console.log(picture); // will get `undefined `
}

```

Literally they’re all p5.js elements, why the results are different ?

---

<div class="post-metadata">

**Author:** ![GoToLoop](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/gotoloop/32/86_2.png) [@GoToLoop](https://discourse.processing.org/u/GoToLoop)\
**Post date:** [May 26, 2023, 12:52pm UTC](https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073/2 "2023-05-26T12:52:16Z")

</div>

> [@WaningJupiter](#):
>
> ```auto
> let picture = image(img, 0,0); 
> console.log(img); // will get `undefined `
> 
> ```

I believe you’ve meant to **log()** variable _picture_, right?  
`console.log(picture);`

When a method returns a reference to its caller object it’s said that method is chainable.

Library p5\*js made a commitment to turn all of its API methods chainable if they didn’t return anything.

However, there are many methods still returning `undefined` due to poor oversight.

---

<div class="post-metadata">

**Author:** ![WaningJupiter](https://avatars.discourse-cdn.com/v4/letter/w/5e9695/32.png) [@WaningJupiter](https://discourse.processing.org/u/WaningJupiter)\
**Post date:** [May 26, 2023, 1:07pm UTC](https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073/3 "2023-05-26T13:07:49Z")

</div>

right, i d like to say `console.log(picture);` i modified in my question. Thanks a lot for the explanation!

---

<div class="post-metadata">

**Author:** ![GoToLoop](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/gotoloop/32/86_2.png) [@GoToLoop](https://discourse.processing.org/u/GoToLoop)\
**Post date:** [May 26, 2023, 1:25pm UTC](https://discourse.processing.org/t/why-i-get-undefined-when-i-console-log-image-img-x-y-but-get-a-p5-object-when-i-console-log-text-text-x-y/42073/4 "2023-05-26T13:25:35Z")

</div>

> [@WaningJupiter](#):
>
> Literally they’re all p5.js elements,

Forgot to answer that part: 🫣

Most of p5\*js API methods are indeed of datatype p5.

However, there are other datatypes too, such as p5.Renderer returned by **createCanvas()**, p5.Image by **loadImage()** or p5.Element by **createElement()**, etc.
