[Javascript] ongelijk waardes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 24-09 17:12
Ik heb even een testcase gemaakt die hieronder te zien is:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func = function()
{
    var test = 
    {
        van : 1,
        naar : this.van,
        
        functie : function()
        {
            console.log(this.naar);
        }
    }
    
    test.functie();
}

func();


Nu krijg ik de melding dat this.naar undefined is terwijl this.van gelijk is aan 1.
Ik krijg dit maar niet opgelost (en ik moet je zeggen dat ik niet goed weer waar ik op moet googlen), enig idee waarom this.naar niet gelijk is aan this.van en dus aan 1? :)

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 10:49
Misschien dat de variabele 'van' nog niet geïnitialiseerd is, op het moment dat 'naar' wordt aangeroepen. Overigens ben ik benieuwd waarom je per se variabele A aan B wilt toewijzen in json.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Op 't moment dat je "naar" zet verwijst this naar window ;) En window heeft geen "van" :Y) Er is simpelweg nog geen "owner" op dat moment.

Leesvoer: http://www.quirksmode.org/js/this.html
In JavaScript this always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. When we define our faithful function doSomething() in a page, its owner is the page, or rather, the window object (or global object) of JavaScript. An onclick property, though, is owned by the HTML element it belongs to.

[ Voor 101% gewijzigd door RobIII op 28-04-2011 02:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14:55
RobIII schreef op donderdag 28 april 2011 @ 02:02:
Op 't moment dat je "naar" zet verwijst this naar window ;) En window heeft geen "van" :Y) Er is simpelweg nog geen "owner" op dat moment.

Leesvoer: http://www.quirksmode.org/js/this.html

[...]
Verwijst this dan in dit geval niet naar zijn function func, in plaats van naar het window object? ;)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31
De eigenaar van window.func() is?

[ Voor 4% gewijzigd door Bosmonster op 28-04-2011 08:43 ]


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 12:14
Nee, this verwijst wel naar de functie 'func'. Amras heeft gelijk. De eigenaar van window.func.test.functie is namelijk window.func

[ Voor 12% gewijzigd door Makkelijk op 28-04-2011 20:50 ]

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Makkelijk schreef op donderdag 28 april 2011 @ 20:48:
[...]


Nee, this verwijst wel naar de functie 'func'. Amras heeft gelijk. De eigenaar van window.func.test.functie is namelijk window.func
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func = function()
{
    var test =
    {
        x : 1,
        y : this,
        z : this.x,
        
        functie : function()
        {
            console.log(this.x);
            console.log(this.y);
            console.log(this.z);
        }
    }
    
    test.functie();
}

func();

1
Window
undefined


See for yourself

Ik kan er niet al te snel door heen scrubben, maar ik meen dat ergens in deze 50 minuten wel iets zat hierover.

[ Voor 16% gewijzigd door RobIII op 28-04-2011 21:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 12:14
Ehmm. Met this.y toon je dus niet the 'this' van 'functie' maar toon je the 'this' van func.test.

De vraag ging over this.naar in 'functie':
Verwijst this dan in dit geval niet naar zijn function func
Ik denk dat er enige spraakverwarring is door het gebruik van 'func' en 'functie' als namen in het initiele voorbeeld en het feit dat er 'this' op 2 plekken staat.. ;)

[ Voor 28% gewijzigd door Makkelijk op 28-04-2011 22:00 ]

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Makkelijk schreef op donderdag 28 april 2011 @ 21:58:
Ehmm. Met this.y toon je dus niet the 'this' van 'functie' maar toon je the 'this' van func.test.
Met this.y toon ik dat this === window. En window heeft geen .naar (of .x in mijn geval)

/edit:
Makkelijk schreef op donderdag 28 april 2011 @ 21:58:
Ik denk dat er enige spraakverwarring is door het gebruik van 'func' en 'functie' als namen in het initiele voorbeeld en het feit dat er 'this' op 2 plekken staat.. ;)
Ik zie 't even niet meer :P If you say so :P

[ Voor 36% gewijzigd door RobIII op 28-04-2011 22:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 23-09 22:25
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func = function() { 
//    this wijst naar window, func is functie en geen constructor en heeft dus geen instance als relevant object.
    var test = { 
        self : this, //test is een variabele binnen func en geen propertie van func, dus this wijst naar this van func welke window is.
        A : (function() { 
            console.log(test +', '+ this); // test is niet gedefinieerd, this wijst nog steeds naar de this van func.
        }()),

        B : function() { 
            console.log(test +', '+ this); // op het moment dat deze functie aangeroepen wordt is test gedefinieerd, en het relevante object voor functie B. this wijst naar test.
        } 
    } 
    test.B(); 
} 
func();

Zoiets denk ik...

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Klaasvaak schreef op donderdag 28 april 2011 @ 22:20:
code:
1
            console.log(test +', '+ this); // test is niet gedefinieerd, this wijst nog steeds naar de this van func.
offtopic:
Je weet dat dit ook gewoon kan?

console.log(test, this);

Daarmee krijg je netjes 2 objecten te zien i.p.v. een (naar) string (geforceerde tekst). Daarmee blijven je objecten in de console ook clickable en dus meer info == *win* :P

console.log("foo", 42, window, "bar", console);

[ Voor 11% gewijzigd door RobIII op 28-04-2011 23:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 23-09 22:25
offtopic:
Bedankt, dat was me niet bekend. Ik gebruik meestal nog ouderwets een alert of een innerHTML van een divje om te debuggen, in combinatie met mijn debuglibrary die ik in het vorige millenium heb geschreven. Maar gebruik console.log steeds vaker, dus dit kan nog wel eens van pas gaan komen.
Pagina: 1