Вивчаючи JS, яким був ваш момент Aha? [зачинено]


16

Ви пам’ятаєте, коли вивчали JavaScript? Який був момент, коли ти раптом "це отримав"? (Наприклад, мій CSS ага-момент був, коли я дізнався про модель коробки ...)

Причина, про яку я питаю, полягає в тому, що я навчаюсь JS протягом 6 тижнів, але все одно вважаю це досить заплутаним. Ось цитата з того, що я нещодавно прочитав на SO:

"..функції діють аналогічно значенням, оскільки метод є властивістю об'єкта, який має значення функції (яка також є об'єктом)."

Мені цікаво, якщо ви також спочатку плуталися, і що саме змусило вас це зрозуміти.

(Я читаю Точки сайту "Просто JavaScript", книгу "Красномовний JavaScript" та слідую за підручником Лінда "Основні JavaScript". Я не маю жодного досвіду програмування і мені було страшно в математиці;)

Спасибі!


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

Цитата та плутанина наступають через те, що ця цитата намагається сказати, що функції - це об'єкти першого класу в JavaScript. Продовжуйте стукати, і ви забезпечите собі джерело моментів «а-ха»: Додаткові орієнтири.
chiggsy

Відповіді:


15

Я думаю, що найбільшим моментом "AHA" для мене був той момент, коли я повністю зрозумів таке:

Змінні значення можуть бути будь-якими, включаючи функції

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

Я погоджуюся з тим, що торкнулося деяких інших відповідей; Момент A-ha для мене був, коли я зрозумів, що таке закриття .

Я розмістив відповідь на питання Що таке закриття? щоб допомогти пояснити це.

Не розуміючи закриттів, Javascript є досить обмеженою мовою, має кілька приємних функцій синтаксису скорочень, таких як []масиви та JSON ( {}для об’єктів), а в контексті браузера - DOM ( window/ document).

Однак, як тільки ви розумієте питання про закриття, багато розуміння стає на місце :

  • Що таке насправді прототип ( дивіться тут )
  • Чому прототипи є ключем до OOP у Javascript ( дивіться тут )
  • Як реально працюють більшість обробників подій у Javascript (це може здатися магічним, не розуміючи закриття)
  • Як заощадити собі багато коду (та / або часу) за допомогою зворотних дзвінків

Ресурси


4

Я думаю, що найважливішою мовою "Аха для мене в Javascript була"

  • Функціонує як об’єкти
  • Закриття
  • Орієнтація на об'єкти, заснована на прототипі
  • Оцінка в JavaScript

Для всіх цих тем ви повинні знайти багато ресурсів в Інтернеті.

(І не думаю , що все буде абсолютно логічно: JavaScript в оману)


Дійсно? JavaScript в оману? Мені це здається цілком природним. Але це тільки я :-P.
Htbaa

3

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

Це був не стільки синтаксис, або OOP, чи щось, що мені ухилялося, більше, ніж жива і керована подіями 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

Ага момент №1, для мене: розуміючи, що 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.