Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / javascript. Вызов функции как метод заданного объекта. / 21 сообщений из 21, страница 1 из 1
09.11.2018, 17:09
    #39730781
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Hello world!
Почему первый скрипт возвращает код функции f
Код: javascript
1.
2.
3.
4.
f.call(f);
function f() {
  alert( this );
}


А второй, строку из алерта?
Код: javascript
1.
2.
3.
4.
f.call(f);
function f() {
  alert( "Вася" );
}
...
Рейтинг: 0 / 0
09.11.2018, 18:11
    #39730811
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,

а что должен вернуть первый код?
...
Рейтинг: 0 / 0
10.11.2018, 20:33
    #39731142
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
...
Рейтинг: 0 / 0
10.11.2018, 20:53
    #39731155
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,

Почему больно, когда бьёшься головой об стену?
...
Рейтинг: 0 / 0
12.11.2018, 15:15
    #39731808
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
вадя,
this хранит ссылка на текущий объект.
В JavaScript функции никак не привязаны к своему контексту
Поэтому ожидал, что встроенный метод toString выведет undefined.
...
Рейтинг: 0 / 0
12.11.2018, 16:02
    #39731840
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Вар1 Вар2 Вар3 Вар4
Код: javascript
1.
2.
3.
4.
function f() {
  alert( this );
}
f.call(f);

Код: javascript
1.
2.
3.
4.
5.
6.
7.
function f() {
  alert( this );
}
f.toString = function(){
	alert("f.toString")
};
f.call(f);

Код: javascript
1.
2.
3.
4.
5.
6.
7.
var obj = {
	name: "Aaa"
};
function f() {
  alert( this );
}
f.call(obj);

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
var obj = {
	name: "Aaa"
};
obj.toString = function(){
	alert("obj.toString")
};
function f() {
  alert( this );
}

Количество alert: 1 Количество alert: 2 Количество alert: 1 Количество alert: 2 alert1 с кодом функции alert1: "f.toString". alert2: undefined. alert1: [object Object] alert1: "obj.toString". alert2: undefined.
Код: javascript
1.
2.
3.
В this находится ссылка на f
f.call(f) равносильно  
alert(f.toString())

Код: javascript
1.
2.
3.
4.
Меняю стандартный toString 
функции на свой. 
Откуда берется второй alert? 
Почему теряется контекст? 

Код: javascript
1.
2.
3.
В this находится ссылка на obj
f.call(obj) равносильно
alert(obj.toString())

Код: javascript
1.
2.
3.
4.
Меняю стандартный toString 
объекта на свой. 
Откуда берется второй alert? 
Почему теряется контекст?
...
Рейтинг: 0 / 0
12.11.2018, 16:28
    #39731858
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,
вариант 4
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var obj = {
	name: "Aaa"
};
obj.toString = function(){
	console.log("obj.toString")
};
function f() {
  console.log( 'sss',this );
}
вывод
ƒ (){
	console.log("obj.toString")
}


где 2 console.log?
...
Рейтинг: 0 / 0
12.11.2018, 16:34
    #39731866
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,
вариант 2

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function f() {
  console.log('111', this );
}
f.toString = function(){
	console.log('222',"f.toString")
};
console.log('---------------');
f.call(f);
VM458:7 ---------------
VM458:2 111 ƒ undefined
VM458:5 222 f.toString
...
Рейтинг: 0 / 0
12.11.2018, 16:36
    #39731868
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
вадя,
В 4-м варианте забыл строку вызова
Код: javascript
1.
f.call(obj);
...
Рейтинг: 0 / 0
12.11.2018, 16:37
    #39731871
oaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2this хранит ссылка на текущий объект.
так ты ж установил "текущий объект" в f -> call(f), что не так?
...
Рейтинг: 0 / 0
12.11.2018, 16:42
    #39731877
oaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2В 4-м варианте забыл строку вызоватут не контекст теряется, а результат твоего метода toString = undefined потому что ничего не return
...
Рейтинг: 0 / 0
12.11.2018, 16:45
    #39731879
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
вадя, поясните пожалуйста свой скрипт.
Как я понял вы намекаете, что alert выводит в своем порядке, консоль в правильном
Но почему вывод идет два раза - не понятно.
...
Рейтинг: 0 / 0
12.11.2018, 17:18
    #39731918
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
вадяYagrus2,
вариант 4
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var obj = {
	name: "Aaa"
};
obj.toString = function(){
	console.log("obj.toString")
};
function f() {
  console.log( 'sss',this );
}
вывод
ƒ (){
	console.log("obj.toString")
}


где 2 console.log?Если заменить тут
Код: javascript
1.
console.log( 'sss',this );

заменить запятую на плюс, будет два консольлога
...
Рейтинг: 0 / 0
12.11.2018, 17:30
    #39731930
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
oakenYagrus2В 4-м варианте забыл строку вызоватут не контекст теряется, а результат твоего метода toString = undefined потому что ничего не return
Подскажите почему вывод проходит два раза?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function f() {
  console.log('111', this );
}
f.toString = function(){
	console.log('222',"f.toString"); return 500;
};
console.log('---------------');
f.call(f);
...
Рейтинг: 0 / 0
12.11.2018, 17:37
    #39731939
oaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2oakenпропущено...
тут не контекст теряется, а результат твоего метода toString = undefined потому что ничего не return
Подскажите почему вывод проходит два раза?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function f() {
  console.log('111', this );
}
f.toString = function(){
	console.log('222',"f.toString"); return 500;
};
console.log('---------------');
f.call(f);

Потому что в твоем коде 2 вызова console.log! Разве не очевидно?
...
Рейтинг: 0 / 0
12.11.2018, 17:43
    #39731950
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,

Код: javascript
1.
2.
3.
4.
5.
6.
f.call();
 111 Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}

f.call(f);
 111 ƒ 500
 222 f.toString
...
Рейтинг: 0 / 0
12.11.2018, 17:44
    #39731953
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
...
Рейтинг: 0 / 0
12.11.2018, 17:54
    #39731961
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
oakenПотому что в твоем коде 2 вызова console.log! Разве не очевидно?Спасибо! С этим разобрался.
...
Рейтинг: 0 / 0
12.11.2018, 17:57
    #39731969
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2
Код: javascript
1.
console.log( 'sss',this );


заменить запятую на плюс, будет два консольлогапрочитай про console.log
...
Рейтинг: 0 / 0
12.11.2018, 17:59
    #39731971
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
oakenпропущено...
тут не контекст теряется, а результат твоего метода toString = undefined потому что ничего не return
Подскажите почему, если заменить в консольлоге запятые на плюс меняется порядок вывода?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function f() {
  console.log('111', this );
}
f.toString = function(){
	console.log('222',"f.toString"); return 500;
};
console.log('---------------');
f.call(f);
...
Рейтинг: 0 / 0
12.11.2018, 18:43
    #39732005
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javascript. Вызов функции как метод заданного объекта.
Yagrus2,

console.log('111', this );
тут два объекта
console.log('111'+ this );
тут 1 объект

тут
console.log('111', this );
запрашивается this, т.е. выполняется, грубо -вызов самого себя - и результат 111 ƒ 500
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / javascript. Вызов функции как метод заданного объекта. / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]