Saat belajar JS, apa momen Aha Anda? [Tutup]


16

Apakah Anda ingat ketika Anda belajar JavaScript? Apa saat Anda tiba-tiba "mengerti"? (Misalnya, CSS aha-moment saya adalah ketika saya belajar tentang model kotak ...)

Alasan saya bertanya adalah karena saya belajar JS selama 6 minggu, tetapi saya masih merasa ini cukup membingungkan. Berikut ini kutipan dari sesuatu yang saya baca baru-baru ini di SO:

"..fungsi bertindak mirip dengan nilai, karena metode adalah properti dari objek yang memiliki nilai fungsi (yang juga merupakan objek)."

Saya ingin tahu apakah Anda bingung juga pada awalnya dan apa yang membuat Anda memahaminya.

(Saya membaca Sitepoints "Simply JavaScript", buku "Eloquent JavaScript" dan mengikuti tutorial JavaScript Esensial Lynda. Saya tidak memiliki pengalaman pemrograman apa pun dan sangat buruk dalam matematika;)

Terima kasih!


1
Saya menemukan kutipan membingungkan dan tidak jujur, dan saya telah menggunakan JavaScript dalam kemarahan selama beberapa tahun, jadi saya tidak terkejut jika membingungkan bagi seseorang yang baru dalam bahasa ini :)
Russ Cam

Kutipan dan kebingungan muncul karena kutipan itu mencoba mengatakan bahwa fungsi adalah objek kelas satu di javascript. Teruslah berdebar, dan Anda akan memberikan diri Anda sumber momen 'a-ha': Kerangka referensi tambahan.
chiggsy

Jawaban:


15

Saya pikir momen "AHA" terbesar bagi saya adalah ketika saya sepenuhnya memahami yang berikut:

Nilai variabel bisa berupa apa saja, termasuk fungsi

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

Saya setuju dengan apa yang telah dijawab oleh beberapa jawaban lainnya; Momen A-ha bagi saya adalah ketika saya mengerti apa itu penutupan .

Saya mengirim jawaban untuk pertanyaan Apa itu penutupan? untuk membantu menjelaskan ini.

Tanpa memahami penutupan, Javascript adalah bahasa yang cukup terbatas, dengan beberapa sintaksis singkatan yang bagus seperti []untuk array dan JSON ( {}untuk objek), dan dalam konteks browser, DOM ( window/ document).

Namun begitu Anda memahami penutupan, banyak pemahaman jatuh ke tempatnya :

  • Apa prototipe sebenarnya ( lihat di sini )
  • Mengapa prototipe adalah kunci untuk OOP dalam Javascript ( lihat di sini )
  • Bagaimana sebagian besar penangan kejadian di Javascript benar-benar berfungsi (bisa terasa seperti sulap tanpa memahami penutupan)
  • Bagaimana cara menyimpan sendiri banyak kode (dan / atau waktu) dengan panggilan balik

Sumber daya


4

Saya pikir bahasa yang paling penting 'Aha untuk saya dalam Javascript adalah

  • Berfungsi sebagai objek
  • Penutupan
  • Orientasi objek berbasis prototipe
  • Pelingkupan dalam JavaScript

Untuk semua topik ini, Anda harus menemukan banyak sumber di web.

(Dan jangan berpikir semuanya akan menjadi benar-benar logis: JavaScript yang membingungkan)


Betulkah? JavaScript adalah membingungkan? Bagi saya itu semua tampak sangat alami. Tapi itu hanya aku :-P.
Htbaa

3

javascript sulit bagi saya ketika saya pertama kali mulai mempelajarinya beberapa tahun yang lalu karena saya pertama kali mulai belajar pengembangan web dari sisi server (php dan perl).

Bukan begitu banyak sintaks atau OOP atau apa pun yang luput dari saya, lebih dari hidup dan event-didorong-javascript - pergi dari "melakukan ini dan ini dan ini dan melayani itu dan Anda sudah selesai" untuk "melakukan ini dan ini dan ini dan kemudian kita terus-menerus menunggu sesuatu terjadi dan merespons sampai pengguna meninggalkan halaman ". Itu benar-benar membuat saya terpukul.

Saya tidak berpikir saya dapat menyebutkan apa pun yang benar-benar membuatnya meresap (tidak ada momen "aha!" Yang pasti - jika saya harus menyebutkan momen tertentu, saya akan mengatakan ketika saya sedang belajar AJAX untuk skrip saran pencarian, tapi IMO itu hanya sewenang-wenang) tetapi ketika saya akhirnya memahami perbedaannya, semuanya menjadi jauh lebih mudah dari sana :)


Beberapa petunjuk yang sangat bagus sudah ada di sini, terima kasih semuanya!

1

Ketika akhirnya saya memahami gagasan bahwa saya dapat mendefinisikan ulang bagian mana pun dari bahasa itu menjadi apa pun yang saya inginkan. Dalam hal ini, ini bahkan lebih kuat daripada C. Sebagai contoh, jika saya tidak menyukai toString()fungsi standar , maka saya akan mengimplementasikannya sendiri:

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

Bagaimana ini benar-benar berbeda dari penggantian?
Nicole

1

Ketika saya menyadari bahwa Anda dapat mengatur properti pada objek fungsi.

Juga ketika saya akhirnya mengerti apa prototipe itu.

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??

Dan saat -ha ketika Anda akhirnya menangkap hasil ini.


0

Aha moment # 1, bagi saya: Menyadari bahwa JavaScript, bahasa, berbeda dari penggunaan utamanya: HTML dinamis dan pemrograman web sisi klien. Saya akan frustrasi dengan JavaScript, ketika saya benar-benar frustrasi dengan DOM dan browser yang tidak kompatibel.

Aha moment # 2: Memahami bahwa pewarisan dapat dieksekusi dengan banyak cara. Warisan berbasis kelas yang khas hanyalah satu. Ada yang lain, yaitu berbasis prototipe (gaya yang digunakan dalam JavaScript).

Sehubungan dengan # 1, saya tidak bisa menolak merekomendasikan JavaScript: The Good Parts . Ini memperlakukan JavaScript sebagai bahasa yang baik dalam dirinya sendiri.


0

Tidak ada blok scoping dan hoisting.

foo(); // function executes, no error

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


-1

jQuery pada dasarnya adalah momen 'a-ha' bagi saya. Sintaks terasa akrab setelah memiliki banyak pengalaman dengan sintaks LINQ / lambda di C #.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.