Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 11.12.2011, 13:33
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от nerv_
this будет window. Или я не прав?
Нет. Стандарт гласит:
Цитата:
Значение this передаётся вызывающим. Если значение this, переданное вызывающим, не является объектом (заметим, что null - не объект), то значением this является глобальный объект.
Сообщение от nerv_
Строки сравниваются по значению.
Избыточное замечание. Строки — это тоже примитивы.
String.prototype.amIObject = "Nope";
var str = "string";
str.amIObject = "Yes!";
alert(str.amIObject)

Последний раз редактировалось B@rmaley.e><e, 11.12.2011 в 13:37.
Ответить с цитированием
  #22 (permalink)  
Старый 11.12.2011, 14:13
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

B@rmaley.e><e, спасибо, что тратите на меня время Перешел по ссылке "стандарт", прочитал. Хочу попросить Вас перейти по этой window, прочитать самое первое предложение, а после еще раз ответить на мой вопрос)

Сообщение от B@rmaley.e><e
Избыточное замечание. Строки — это тоже примитивы.
Java Script - Подробное руководство, 3.15.2. Копирование и передача строк, Флэнаган предполагает, что строки передаются по ссылке, но сравниваются по значению.
Ваш пример на данный момент понять не могу. Про prototype только читаю)))

p.s.: я не строю из себя умника. Просто хочу понять, как оно устроено
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #23 (permalink)  
Старый 11.12.2011, 14:27
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от nerv_
прочитать самое первое предложение, а после еще раз ответить на мой вопрос
Так что Вам не нравится?
Сообщение от monolithed
вызов фунции происходит уже в Window, т.к. this будет null
При вызове функции в качестве this будет передан null. При вызове [[Call]] this будет определён согласно этому.

С тем, что window — глобальный объект и именно на него будет указывать this в этом случае, никто не спорит. Но вместе с тем, во внутренней механике стандарта используется именно null. window не берётся каким-либо магическим образом из окруженая. И, кстати, в strict mode ES5 this не становится глобальным объектом в случае
var a = function () {
  alert(this);
};

a();
a.call(null);
(a = a)();
"use strict";
var a = function () {
  alert(this);
};

a();
a.call(null);
(a = a)();
Сообщение от nerv_
Флэнаган предполагает, что строки передаются по ссылке, но сравниваются по значению.
Элементарные типы.
Фленеган же зачем-то погружается в особенности реализации, которые не зависят от стандарта и могут сильно варьироваться.
Строки наверняка реализованы с механизмом copy-on-write.

Последний раз редактировалось B@rmaley.e><e, 11.12.2011 в 14:46.
Ответить с цитированием
  #24 (permalink)  
Старый 11.12.2011, 17:38
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от monolithed Посмотреть сообщение
Livanderiaamarum,

var foo = function() {
     return this;
};

var bar = {
  baz: function () {
    return this;
  }
};

alert([
    foo(), //Window
    foo.prototype.constructor(), //Object 
    bar.baz(), //Object  
    (bar.baz)(), //Object 
    (bar.baz = bar.baz)(), //Window
    (bar.baz = bar.baz()), //Object
     bar.baz  //Object 
].join('\n'));

Рассмотрим подробнее, что происходит с:
(bar.baz = bar.baz)();
В этом случае, согласно спецификации вызывается метод GetValue().
Это значит, что тип Reference заменяется Function и вызов фунции происходит уже в Window, т.к. this будет null


Это я ЗНАЮ)! ну почему НИ КТО не читает внимательно текст топика)!!!!! Вот в чем вопрос, почему reference меняется на VALUE? От куда именно скобки берут ТО что возвращать мне?? Слева от ровно или справа? Слева от ровно по окончанию дествия лежит ссылка. справа тоже лежит ссылка. Значит скобки берут значение И НЕ СЛЕВА ОТ РОВНО и НЕ СПРАВА ОТ РОВНО, тогда откуда)?? или может происходит следущее??

(bar.baz = bar.baz)()


тут яваскрипт начинает вычислять то что в скобках.
и получает следущее

(bar.baz /*и тут ссылка*/ = bar.baz /*тут ссылка*/ )()



Простое присваивание ( = )
Значение нетерминала ВыражениеПрисваивания : ЛевостороннееВыражение = ВыражениеПрисваивания вычисляется по следующей схеме:
1. Вычислить значение ЛевостороннегоВыражения.
2. Вычислить значение ВыраженияПрисваивания.
3. Вызвать ПолучитьЗначение(Результа (2)).
4. Вызвать ЗаписатьЗначение(Результа (1), Результат(3)).
5. Вернуть Результат(3).


по скольку возвращается результат 3, то есть ЗНАЧЕНИЕ правого операнда ровно происходит следущее:

(baz /*тут ЗНАЧЕНИЕ*/)()



потом вступают в дело скобки группировки, и начинают смотреть ЧТО ВНУТРИ НИХ НИХ находится. смотрят - там значение, а не ссылка и возвращают значение. Дальше идут в ход скобки вызова и вызывают эту функцию делая её this равным global(null? но работает как global)

__________________________________________________

моя ошибка была в том что я думал что оператор ровно возвращает не ЗНАЧЕНИЕ правого выражения, а ссылку левого выражения)). и это я и пытался выяснить, и как оказалось тут очень мало людей понмиающих как работает javascript. но все ровно всем спасибо) пошел учить спецификацию.

Последний раз редактировалось Livanderiaamarum, 11.12.2011 в 17:41.
Ответить с цитированием
  #25 (permalink)  
Старый 11.12.2011, 17:49
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Livanderiaamarum
Вот в чем вопрос, почему reference меняется на VALUE?
Важно запомнить, что this в контексте функции определяется caller'ом. И все, что определяется слева от () является типом Reference, в противном случае null, а т.к. нет практического смысла возвращать null подставляется Window.
Исходя из вышесказанного выражение типа:
(foo.bar = foo.bar)(); не определяются как Reference, именно по этому возращается Window (в basic mode).

Сообщение от nerv_
Можно ссылку?
11.1.6 Оператор группировки
11.2 Левосторонние выражения
11.13.1 Простое присваивание ( = )

Сообщение от nerv_
Флэнаган предполагает, что строки передаются по ссылке, но сравниваются по значению.
Можно предположить, что прототип функции примерно такой:
template <class T> T GetValue(const T &value);

В этом случае, формально значение передается по ссылке.

Последний раз редактировалось monolithed, 13.12.2011 в 08:33.
Ответить с цитированием
  #26 (permalink)  
Старый 11.12.2011, 18:29
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

можно ссылку?
-------------

держи
http://dmitrysoshnikov.com/ecmascrip...hapter-3-this/
Ответить с цитированием
  #27 (permalink)  
Старый 11.12.2011, 20:48
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

всем спасибо)
Сообщение от Livanderiaamarum
и как оказалось тут очень мало людей понмиающих как работает javascript
Не согласен. Вам (да и мне в том числе) уже по нескольку раз объяснили ув. B@rmaley.e><e и monolithed что да как.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 11.12.2011 в 21:39.
Ответить с цитированием
  #28 (permalink)  
Старый 11.12.2011, 22:54
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Livanderiaamarum, читать спецификацию — хорошая идея. Возможно, тогда Вы поймёте, что ничто, кроме примитивов (элементарных типов в терминологии стандарта) по значению нигде в процессе выполнения программы появиться не может. Вы никогда не сможете получить объект по значению, только по ссылке.
Ответить с цитированием
  #29 (permalink)  
Старый 11.12.2011, 23:21
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от B@rmaley.e><e Посмотреть сообщение
Livanderiaamarum, читать спецификацию — хорошая идея. Возможно, тогда Вы поймёте, что ничто, кроме примитивов (элементарных типов в терминологии стандарта) по значению нигде в процессе выполнения программы появиться не может. Вы никогда не сможете получить объект по значению, только по ссылке.
вы говорите полный бред.

Простое присваивание ( = )
Значение нетерминала ВыражениеПрисваивания : ЛевостороннееВыражение = ВыражениеПрисваивания вычисляется по следующей схеме:
1. Вычислить значение ЛевостороннегоВыражения.
2. Вычислить значение ВыраженияПрисваивания.
3. Вызвать ПолучитьЗначение(Результа( 2)).
4. Вызвать ЗаписатьЗначение(Результа( 1), Результат(3)).
5. Вернуть Результат(3).


возвращается ИМЕННО VALUE правой стороны а не ссылка. если в правой стороне обьект то возвращается VALUE обеькта. Сколько можно уже это мусолить? вам же на примерах показали. Суть моего вопроса в том, ЧТО ИМЕННО возвращает ровно, как оно берет и что куда кладет. И как выяснилось возвращается не ссылка, а значение, которое посчиталось справа от знака ровно. Консоль показывала то же самое, но мне было интересно почему.


_______________________________________
п.с. получить обьект не по ссылке а по значению можно написав:
{a:20} //это обьект который не имеет ни какой ссылки, и я могу с ним работать в процессе выполнения кода
, что противоречит вашим словам, и именно по этому я и назвал их бредом. уж такое сморозить ЧИТАЯ спецификацию? стыдно должно быть вам.... вы наверное не даже не знаете про типы VALUE и REFERENCE ?

Последний раз редактировалось Livanderiaamarum, 11.12.2011 в 23:33.
Ответить с цитированием
  #30 (permalink)  
Старый 11.12.2011, 23:30
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

пипец, зашел на этот сайт думая что тут профессионалы сидят.... обломался(((( тут оч мало народа который действительно шарит, в том числе и я((
что печально.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В contains() не подставляется значение переменной Heger jQuery 2 11.12.2011 20:26
Значение переменной salex009 jQuery 1 05.12.2011 16:55
оператор return возвращает значение, а не ссылку. Vertuplatonium Общие вопросы Javascript 4 16.05.2011 14:02