powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / javascript. Вызов функции как метод заданного объекта.
21 сообщений из 21, страница 1 из 1
javascript. Вызов функции как метод заданного объекта.
    #39730781
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39730811
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

Почему больно, когда бьёшься головой об стену?
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731808
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
this хранит ссылка на текущий объект.
В JavaScript функции никак не привязаны к своему контексту
Поэтому ожидал, что встроенный метод toString выведет undefined.
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731840
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вар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
javascript. Вызов функции как метод заданного объекта.
    #39731858
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39731866
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39731868
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
В 4-м варианте забыл строку вызова
Код: javascript
1.
f.call(obj);
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731871
oaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2this хранит ссылка на текущий объект.
так ты ж установил "текущий объект" в f -> call(f), что не так?
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731877
oaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2В 4-м варианте забыл строку вызоватут не контекст теряется, а результат твоего метода toString = undefined потому что ничего не return
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731879
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, поясните пожалуйста свой скрипт.
Как я понял вы намекаете, что alert выводит в своем порядке, консоль в правильном
Но почему вывод идет два раза - не понятно.
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731918
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя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
javascript. Вызов функции как метод заданного объекта.
    #39731930
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39731939
oaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39731950
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39731953
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731961
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oakenПотому что в твоем коде 2 вызова console.log! Разве не очевидно?Спасибо! С этим разобрался.
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731969
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2
Код: javascript
1.
console.log( 'sss',this );


заменить запятую на плюс, будет два консольлогапрочитай про console.log
...
Рейтинг: 0 / 0
javascript. Вызов функции как метод заданного объекта.
    #39731971
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
javascript. Вызов функции как метод заданного объекта.
    #39732005
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

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


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