2013-11-16 2 views
0

У меня есть эта скрипка http://jsbin.com/EvIYomiF/4/ и просто для того, чтобы заметить, что его содержимое javascript находится в двух файлах.Обозначение объекта Javascript Pproblem

Ну, как вы можете видеть в демонстрационной версии, область dom переписывается как-то, и я хочу понять, почему. Я имею в виду, что сам = этот взлом - это, конечно, плохая практика, но я не понимаю, почему это перезаписывается.

Я не нахожу слов, чтобы описать проблему, извините, но скрипка это единственный способ, который я нашел, чтобы легко объяснить мою проблему.

+0

Поскольку 'on' метод JQuery передает элемент как контекст. 'this' зависит от того, как ** вы вызываете функцию, она динамична. – elclanrs

+0

У вас есть 'cta = {}', а затем 'this.cta = $ (cta)' - это приведет к более или менее бесполезному объекту jQuery. Вы инициализируете «cta» как объект ampty, а затем помещаете вокруг него обертку jQuery. Что вы ожидаете от этого? (На самом деле ничего полезного не будет.) – Pointy

+0

@ Вы правы, я не совсем понимаю, и именно поэтому я спрашиваю. Я пытаюсь понять, почему этот способ (так) неправильный: P – raulricardo21

ответ

4

Все гипотезы о this не имеет значения, и все ведут вас по неправильной тропе.

Проблема в том, что self не был изолирован, используя var, поэтому он является глобальным. Второй self перезаписывает первый.

Просто сделать это var self=this заставляет все это работать. То, что вы сделали, это обычная практика, чтобы избежать изменения контекста this обработчика событий JQuery

DEMO

+0

Наконец-то! Спасибо @charlietfl, я на мгновение подумал, что сам может стать глобальным внутри этой функции. Также спасибо за демонстрацию. Если вы, случайно, имеете некоторую ссылку с информацией, которая была бы замечательной. – raulricardo21

+1

Каждый раз, когда вы не используете 'var', он делает разворот в верхней части области, создавая неожиданное поведение. Лучше всего всегда, всегда используйте его. Просто найдите область javascript и закрытие javascript – charlietfl

+0

Большое спасибо, ваш ответ был очень полезным – raulricardo21