LINUX.ORG.RU

node.js

 


1

1

Привет ребята!!! Я решил изучить javascript и за одно ноду!!!
Подскажите ошибку в коде.

var rp  =  {ip: 1, 
	     getip : function()
	     {
		 this.ip = 2;
		 console.log(rp.ip);
		 console.log(this.ip);
	     }}
setTimeout(rp.getip, 1);

У меня в консоль выдает

1
2
А по задумке должно.
2
2
Что тут не так ?


self= this

Oh shit. Каждый сходим с ума по своему

Сплошное непонятно, непонятна суть, непонятно что ты хочешь сделать, если не понимаешь что такое объекты и свойства.

MDN is your friend

invokercd ★★★★ ()
Ответ на: комментарий от invokercd

rp.ip и this.ip Ссылаются на одно и то же свойство одного и того же объекта так? Так почему они выводят разные значения. Вот что мне интересно.

Int0l ()

setTimeout(rp.getip.bind(rp), 1)

Kilte ★★★★★ ()
Ответ на: комментарий от Int0l

Чувак, я тебе не зря советовал MDN:

MDN => setTimeout

MDN => this

Тогда бы ты знал что setTimeout использует global scope, поэтому ты в первом случае получаешь rp.ip свойство, а во втором уже [global].ip.

Надеюсь так понятнее:

Function.prototype.apply.call(rp.getip, rp); //2,2 this === rp
Function.prototype.apply.call(rp.getip, global); //1,2 this === global
rp.getip.call(rp); //2,2

invokercd ★★★★ ()
Последнее исправление: invokercd (всего исправлений: 1)
Ответ на: комментарий от invokercd

Что ты подразумеваешь под «использует global scope»?

Int0l ()
Ответ на: комментарий от Int0l

google://javascript execution context

google://javascript global scope

google://javascript closures

google://javascript function scope

invokercd ★★★★ ()
Последнее исправление: invokercd (всего исправлений: 1)
Ответ на: комментарий от invokercd

Я знаю что такое область видимости, что такое замыкания, область видимости функций.

Int0l ()
Ответ на: комментарий от invokercd

Я правильно понял что ты считаешь, что когда в моем примере я вызываю console.log(this.ip);
То я обращаюсь не к объекту rp, а переменной ip в глобальном контексте?

Int0l ()

У меня в консоль выдает

все правильно

А по задумке должно

значит думаешь не в ту сторону

umren ★★★★★ ()
Ответ на: комментарий от Int0l

Внезапно, setTimeout - это функция, и если ты знаешь что такое [EC] то должнен знать какой this будет использован при вызове функции.

//Всегда ваш, captain obvious

invokercd ★★★★ ()

Увидел двойной пробел с двух метров, с вертушки загасил ноут, дальше не читал.

dizza ★★★★★ ()

Разобрался (спасибо всем кто подсказывал).

Int0l ()
Ответ на: комментарий от Int0l

rp.ip и this.ip Ссылаются на одно и то же свойство одного и того же объекта так?

Нет, почитай на MDN что такое this.

И про new тоже заодно.

tensai_cirno ★★★★★ ()
Последнее исправление: tensai_cirno (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.