Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.01.2010, 22:04
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Volk_88
Что касается данного выражения, думаю это было сделано из учета обращения к глобальному объекту в коде фреймворка, где this - не является глобальным объектом
Да, если процент обращения к window в контекстах, где this не равен глобальному объекту большой, то это является оптимизацией. Но, тогда, идеологически верно было бы var window = window, что я и отметил, поскольку есть разница между window и глобальным объектом.

Сообщение от Volk_88
а вот this уже на jQuery (или я не прав? =) )
Прав, но вообще, зависит от выражения вызова и this определяется каждый раз при вызове, поэтому и этот метод extend можно вызвать так, где this будет не jQuery.

Сообщение от Volk_88
но вот я так и не понял, для чего реализована функция noConflict
Чтобы иметь возможность восстановить затёртые идентификаторы $ и jQuery (теоретически и практически, пользователь может использовать несколько фреймворков; noConflict позволит использовать $, например, из Prototype.js, а имя jQuery - из jQuery; также, там предусмотрен глубокий вариант восстановления, где восстанавливается и имя jQuery).

Сообщение от Volk_88
а на сколько бы изменение в первом примере window на this дало бы выигрыш
Здесь надо почитать про разрешение имён идентификаторов и цепь областей видимости.

Любой идентификатор разрешается - определяется, к какой области видимости в иерархической цепи, он относится. Это делается каждый раз при обращении к имени переменной. Соответственно, чем глубже контекст исполнения, тем дольше будет разрешаться идентификатор, определённый в более высоких контекстах исполнения (например, глобальном контексте).

(function () {
  (function () {
    (function () {
      alert([this, window]);
    })();
  })();
})();


Здесь, чтобы разрешить имя window нужно просмотреть scope chain (цепь областей видимости) из самого глубокого контекста исполнения - и вверх по цепи, т.е. 4 звена цепи.

В свою очередь, this, как уже было отмечено, никогда не разрешается, он определён один раз при входе в контекст. Поэтому в alert-e из примера выше значение this будет получено сразу - в отличие от window.

Однако, поскольку window - это host-объект, его разрешение (и вообще поведение) может зависеть от реализации.

Подробней про scope chain: http://javascript.ru/blog/Dmitry-A.-...j-vidimosti.-0
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 11.01.2010 в 22:09.
Ответить с цитированием
  #12 (permalink)  
Старый 17.03.2011, 13:51
Новичок на форуме
Отправить личное сообщение для zeran Посмотреть профиль Найти все сообщения от zeran
 
Регистрация: 17.03.2011
Сообщений: 1

Сообщение от Octane Посмотреть сообщение
что-то куча связей fn-init-prototype и ненужных оберток
function $(…) {
    return new $.wrapper(…);
}

$.wrapper = function (…) {
    this… = …;
};

$.wrapper.prototype = $.prototype = {
    constructor: $,
    raz: …,
    dva: …,
    tri: …
};

Проблем вроде нет, если удобно, ни что не мешает использовать.
-
А можно привести полный пример кода, а то не получается сделать рабочий пример ( Говорит: $ is not defined
Ответить с цитированием
  #13 (permalink)  
Старый 18.03.2011, 21:33
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от zeran
А можно привести полный пример кода, а то не получается сделать рабочий пример
<div id="div">text</div>

<script type="text/javascript">
function $(id) {
    if(this.$) return new $.wrapper(id);
}

$.wrapper = function(id) {
     if(typeof id == 'string' /* etc ... */) {
         this.id = document.getElementById(id);
     }
};

$.wrapper.prototype = $.prototype = {
    constructor: $,
    css: function(value) {
        for(i in value) {
            this.id.style[i] = value[i];
        }
         return this;
    }
    /* , 
    ....
   */
};

$('div').css({'color':'red', 'textTransform':'uppercase'});

</script>

Последний раз редактировалось monolithed, 18.03.2011 в 22:11.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерактивный редактор графиков функций Иван Карев Ваши сайты и скрипты 8 01.10.2009 17:02
setInterval, и замена функций SunnyDay Общие вопросы Javascript 16 29.08.2009 00:51
как сложить результаты двух(и более) функций? art-kl Элементы интерфейса 2 26.08.2009 16:56
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
подскажите с параметрами функций hadji29 Общие вопросы Javascript 2 15.02.2009 20:39