Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.07.2013, 22:28
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Создание примитива с таким же именем как у уже существующего свойства функции
В примере ниже операция ++ сработает на локальной переменной test, а не на свойстве test объекта функции. Потому что test новая переменная, которая получила значение свойства, но никак не является ссылкой на свойство.

function test(){
    var test = arguments.callee.test;
    test++;
}


Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
Ответить с цитированием
  #2 (permalink)  
Старый 28.07.2013, 23:51
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от lancer
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
ты о чём вообще
локальная переменная будет хранить то, что ей присвоили, иначе undefined
написав arguments.callee.test ты уже обращаешься к свойству, в приведённом примере туда ляжет undefined (если ранее присвоишь другое значение, то оно)

http://es5.javascript.ru/x8.html#x8.12
Цитата:
При вызове внутреннего метода [[GetOwnProperty]] объекта O с именем свойства P выполняются следующие шаги:

1. Если у O нет собственного свойства с именем P, вернуть undefined.
...
Ответить с цитированием
  #3 (permalink)  
Старый 29.07.2013, 00:47
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от lancer
Каким свойством будет записана локальная переменная test, если свойство test у функции уже существует?
слова: объект вызова о чём то говорят?
Ответить с цитированием
  #4 (permalink)  
Старый 29.07.2013, 01:04
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Ну да, arguments.callee.test = 1, это аналогично var test = 1;
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.

Если что тут, хотя как по мне вопрос исчерпан.
функции-объекты

dmitriymar, твой минус мне в карму "учи основы", так я их и учу, и не моя вина что в учебнике опечатка. Не хочешь помогать - не надо.

Последний раз редактировалось lancer, 29.07.2013 в 01:08.
Ответить с цитированием
  #5 (permalink)  
Старый 29.07.2013, 03:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от lancer
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test.
Все правильно написано в учебнике. Так и есть.
Сообщение от lancer
Я че и подумал, как могут быть два test.
А почему нет? Ты создал локальную переменную test, у которой тут же задал начальное значение, равное значению arguments.callee.test.
Операции над test никак не повлияют на arguments.callee.test (с чего бы это)?
Ответить с цитированием
  #6 (permalink)  
Старый 29.07.2013, 09:15
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от lancer
так я их и учу, и не моя вина что в учебнике опечатка
Нет там опечатки , учи основы , выучи что передаётся по ссылке , а что по значению и прочие основы и вопросов не будет и обвинений в "опечатках" . ты 5 лет на форуме
Сообщение от lancer
Не хочешь помогать - не надо.
-чувак это ты не хочешь вдумываться в то что тебе говорят, и изучить основы наконец
чего стоит "Создание примитива с таким же именем как у уже существующего свойства функции" -что такое примитив? что это за термин ?

Последний раз редактировалось dmitriymar, 29.07.2013 в 09:19.
Ответить с цитированием
  #7 (permalink)  
Старый 29.07.2013, 19:07
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Сообщение от danik.js
Сообщение от lancer
В учебнике тогда сырой пример, объясняется что если test = arguments.callee.test, а потом test++, то значение будет прибавленно именно у test, а не у arguments.callee.test. Я че и подумал, как могут быть два test. Там надо было написать как-то test_new = arguments.callee.test.
Все правильно написано в учебнике. Так и есть.
Ниже этого раздела пишется, что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee. Ничего и не говориться потому что про них и выше как раз пример с arguments.callee - а раз ничего не говориться, я и сделал такие выводы.

dmitriymar, конечно спасибо за советы про что почитать, но не надо раньше времени делать выводы, учебник кривовато написан, об этом и в комментариях многие говорят. Насчет 5 лет - так 4 из них почти им не занимался.

Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет. Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля.

Плохо, что понимаешь это когда уже намучаешься с недельку с сухим материалом и переспросишь по 10 раз очевидные детали.

Последний раз редактировалось lancer, 29.07.2013 в 19:47.
Ответить с цитированием
  #8 (permalink)  
Старый 29.07.2013, 20:23
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от lancer
что переменная объявленная не через var попадает в свойство объекта window, я и подумал, что те что без var внутри функции попадают в arguments.callee
ох-й вывод, самому не смешно

Сообщение от lancer
Не знаю как тут поживает другой учебник, но вот тот, на который я дал ссылку даже нельзя назвать учебником - быстрая справка да и то убогая. Почему? Потому что совершенно не объясняется для чего все это служит, всего лишь говориться, есть это и это. Изредко только появляются хоть какие-то примеры на этот счет
нет, lancer, учебник как раз не плохой, додумывать надо меньше подобным образом, а додуманное проверять

Сообщение от lancer
Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. Сейчас почитал и понял, что это небо и земля
вот тебе ближайший учебник http://es5.javascript.ru/, так как это исходный источник того, как должны работать основные конструкции языка (хотя лучше почитать в оригинале)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13
как предотвратить повторное создание функции kichSman jQuery 3 06.09.2011 13:49