Когда вы изучали JS, каким был ваш ага-момент? [закрыто]


16

Вы помните, когда изучали JavaScript? В какой момент вы внезапно "получили это"? (Например, мой CSS-ха-момент был, когда я узнал о блочной модели ...)

Причина, по которой я спрашиваю, состоит в том, что я изучаю JS в течение 6 недель, но я все еще нахожу это довольно запутанным. Вот цитата из того, что я недавно читал на SO:

«..функции действуют аналогично значениям, так как метод - это свойство объекта, имеющего значение функции (которая также является объектом)».

Мне любопытно, если вы тоже были смущены в начале и что заставило вас понять это.

(Я читаю Sitepoints «Просто JavaScript», книгу «Eloquent JavaScript» и следую учебному пособию Линды по Essential JavaScript. У меня нет опыта программирования, и я ужасно разбирался в математике;)

Благодарность!


1
Я нахожу цитату непонятной и непонятной, если честно, и я уже несколько лет использую JavaScript в гневе, поэтому я не удивлен, если он сбивает с толку кого-то, кто плохо знаком с языком :)
Russ Cam

Происходит цитата и путаница, потому что эта цитата пытается сказать, что функции - это объекты первого класса в javascript. Продолжайте стучать, и вы предоставите себе источник моментов «а-ха»: дополнительные ориентиры.
Chiggsy

Ответы:


15

Я думаю, что самый большой момент «АГА» для меня был, когда я полностью осознал следующее:

Значения переменных могут быть любыми, включая функции

var person = {
    name: 'Sean',
    getName: function() { return this.name; },
    numbers: [7, 11, 41]
}

var myvar = person.name;
alert(myvar); //prints name
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //undefined

myvar = person.getName;
alert(myvar); //prints the contents of the function as a string
alert(myvar()); //calls the function
alert(myvar.length); //undefined

myvar = person.numbers;
alert(myvar); //prints contents of array
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //prints 3


10

Я согласен с тем, что затронули некоторые другие ответы; Момент А-ха для меня был, когда я понял, что такое закрытие .

Я разместил ответ на вопрос Что такое закрытие? чтобы помочь объяснить это.

Без понимания замыканий Javascript является довольно ограниченным языком с несколькими приятными сокращенными синтаксическими функциями, такими как []для массивов и JSON ( {}для объектов), а также в контексте браузера, DOM ( window/ document).

Однако, как только вы поймете замыкания, много понимания станет на свои места :

  • Что на самом деле является прототипом ( см. Здесь )
  • Почему прототипы являются ключом к ООП в Javascript ( см. Здесь )
  • Как в действительности работают большинство обработчиков событий в Javascript (это может показаться магией без понимания замыканий)
  • Как сэкономить много кода (и / или времени) с помощью обратных вызовов

Ресурсы


4

Я думаю, что самый важный язык «Ага для меня в Javascript были

  • Функции как объекты
  • Затворы
  • Прототип-ориентированная объектная ориентация
  • Обзоры в JavaScript

По всем этим темам вы должны найти множество ресурсов в Интернете.

(И не думаю , что все будет совершенно логично: JavaScript в заблуждение)


В самом деле? JavaScript в заблуждение? Мне все это кажется вполне естественным. Но это только я :-P.
Htbaa

3

Мне было трудно работать с javascript, когда я впервые начал изучать его несколько лет назад, потому что я впервые начал изучать веб-разработку с серверной стороны (php и perl).

Это было не столько синтаксисом или ООП, ни чем-то, что ускользало от меня, тем более живой и управляемой событиями javascript - переходя от «делай это, это и это и это, и обслуживай это, и ты готов», чтобы сделать это и это, и это, и затем мы находимся в постоянном состоянии ожидания чего-то, что произойдет, и ответа, пока пользователь не покинет страницу ». Это действительно бросило меня в тупик.

Я не думаю, что могу назвать что-то конкретное, что действительно заставило бы его погрузиться (без определенного момента «ага!» - если бы мне пришлось назвать конкретный момент, я бы сказал, когда я изучал AJAX для сценария с поисковыми предложениями, но IMO это просто произвольно) но когда я в конце концов понял разницу, все стало намного проще оттуда :)


Некоторые действительно хорошие направления уже здесь, спасибо всем!

1

Когда я, наконец, понял, что могу переопределить любую часть языка в любую хрень, какую захочу. В этом отношении он даже более мощный, чем C. Например, если мне не нравится стандартная toString()функция, я реализую свою собственную:

x.toString = function () {
    return "this is MY toString function biatch!";
}

Как это действительно отличается от переопределения?
Николь

1

Когда я понял, что вы можете установить свойство для объекта функции.

Также, когда я наконец понял, что это за прототип.

function Alpha(){
    return 'aplha';
}
Alpha.Beta = function(){
    return 'beta';
}
Alpha.prototype.Delta = function(){
    return 'delta';
}

Alpha(); // 'alpha'
Alpha.Beta(); // 'beta'
new Alpha().Delta(); // 'delta'

0
function Obj() {
    this.x = 42;
    this.value = function() {
        return this.x;
    };
}

var o = new Obj();
o.value();        // 42
var f = o.value;
f();              // undefined??

И момент а-ха, когда вы наконец поймаете эти результаты.


0

Еще один момент для меня: Понимание того, что язык JavaScript отличается от своего основного использования: динамического HTML и веб-программирования на стороне клиента. Я был бы разочарован JavaScript, когда я действительно был разочарован несовместимостью DOM и браузера.

Ага момент №2: Понимание того, что наследование может быть выполнено разными способами. Типичное наследование на основе классов только одно. Есть и другие, а именно на основе прототипов (стиль, используемый в JavaScript).

Что касается № 1, я не могу не рекомендовать JavaScript: хорошие части . Он рассматривает JavaScript как прекрасный язык сам по себе.


0

Нет блока обзора и подъема.

foo(); // function executes, no error

if (...) {
  function foo(){
    ...
  }
}


-1

JQuery был для меня моментом «а-ха». Синтаксис показался мне знакомым после большого опыта работы с синтаксисом LINQ / lambda в C #.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.