JS öğrenirken, Aha-anınız neydi? [kapalı]


16

JavaScript öğrenirken hatırlıyor musunuz? Aniden "anladınız" an neydi? (Örneğin, CSS aha-momentim kutu modelini öğrendiğim zamandı ...)

Sormamın nedeni JS'yi 6 hafta boyunca öğrenmemdir, ancak yine de oldukça kafa karıştırıcı buluyorum. İşte SO'da son zamanlarda okuduğum bir şeyden bir teklif:

"..fonksiyonları değerlere benzer şekilde hareket eder, çünkü metod bir fonksiyonun değerine (aynı zamanda bir obje) sahip olan nesnenin bir özelliğidir."

Başlangıçta da kafanızın karışıp karışmadığını ve onu anlatan şeyin ne olduğunu merak ediyorum.

(Sitepoints "Simply JavaScript", "Eloquent JavaScript" kitabını okuyorum ve Lynda'nın Temel JavaScript eğitimini izliyorum. Herhangi bir programlama deneyimim yok ve matematikte korkunçtu;)

Teşekkürler!


1
Alıntıyı kafa karıştırıcı ve dürüst olmak gerekirse belirsiz buluyorum ve JavaScript'i birkaç yıldır öfkeyle kullanıyorum, bu yüzden dile yeni gelen biri için kafa karıştırıcı olması şaşırtıcı değilim :)
Russ Cam

Alıntı ve karışıklık geliyor çünkü bu alıntı fonksiyonların javascript birinci sınıf nesneler olduğunu söylemeye çalışıyor. Vurmaya devam edin ve kendinize 'a-ha' anlarının kaynağını sağlayacaksınız: Ek referans çerçeveleri.
chiggsy

Yanıtlar:


15

Sanırım benim için en büyük "AHA" anı aşağıdakileri tam olarak kavradığım zamandı:

Değişken değerler, işlevler de dahil olmak üzere herhangi bir şey olabilir

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

Diğer cevapların bazılarına değindiğine katılıyorum; Benim için A-ha anı, kapatmanın ne olduğunu anladığım zamandı .

Kapanış nedir? Sorusuna bir cevap gönderdim. bunu açıklamaya yardımcı olmak için.

Kapanışları anlamadan Javascript, []diziler ve JSON ( {}nesneler için) ve tarayıcı bağlamında DOM ( window/ document) gibi birkaç hoş steno sözdizimi özelliği ile oldukça sınırlı bir dildir .

Ancak kapanışları anladıktan sonra, çok fazla anlayış yerine oturmaktadır :

  • Gerçekten bir prototip nedir ( buraya bakın )
  • Prototipler neden Javascript'te OOP'nin anahtarıdır ( buraya bakın )
  • En çok Javascript'teki olay işleyici gerçekten nasıl çalışır (kapanışları anlamadan sihir gibi görünebilir)
  • Geri aramalarla kendinize çok fazla kod (ve / veya zaman) nasıl kaydedilir?

kaynaklar


4

Sanırım Javascript'te benim için en temel dil '

  • Nesne işlevi
  • Kapaklar
  • Prototip tabanlı nesne yönelimi
  • JavaScript'te kapsam belirleme

Tüm bu konular için web'de bol miktarda kaynak bulmalısınız.

(Ve her şeyi düşünmüyorum tamamen mantıksal hale gelecektir: JavaScript edilir kafa karıştırıcı)


Gerçekten mi? JavaScript edilir kafa karıştırıcı? Benim için her şey oldukça doğal görünüyor. Ama bu sadece benim :-P.
Htbaa

3

javascript benim için birkaç yıl önce öğrenmeye başladığım için zor oldu çünkü ilk önce web-geliştirme şeylerini sunucu tarafı sonundan (php ve perl) öğrenmeye başladım.

Bu sözdizimi ya da OOP ya da beni kaçıran bir şey değildi. ve bu ve bu ve sonra bir şey olmasını beklemek ve kullanıcı sayfadan ayrılana kadar yanıt vermek için sürekli bir durumdayız ". Bu beni gerçekten bir döngü için attı.

Ben gerçekten (kesin bir "aha!" Anı batırdı özel bir şey adlandırabilirsiniz sanmıyorum - belirli bir anı adlandırmak zorunda olsaydım, bir arama önerisi komut dosyası için AJAX öğrenirken söyleyebilirim, ama IMO sadece keyfi) ama sonunda farkı kavradığımda, her şey oradan çok daha kolaylaştı :)


Zaten burada bazı gerçekten iyi yönler, herkese teşekkürler!

1

Sonunda dilin herhangi bir bölümünü, istediğim her şeye yeniden tanımlayabileceğim fikrini kavradığımda. Bu bakımdan, C'den bile daha güçlüdür. Örneğin, standart toString()işlevi beğenmezsem , o zaman kendimi uygularım:

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

Bu geçersiz kılmanın gerçekten farkı nedir?
Nicole

1

Bir fonksiyon nesnesinde bir özellik ayarlayabildiğinizi fark ettiğimde.

Ayrıca nihayet prototipin ne olduğunu anladığımda.

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

Ve bir-ha an zaman nihayet Bu sonuçlara yakalamak.


0

Aha # 1, benim için: JavaScript'in, dilin birincil kullanımından farklı olduğunu fark etmek: dinamik HTML ve istemci tarafı web programlama. Ben gerçekten DOM ve tarayıcı uyumsuzlukları ile sinirli olduğum zaman, JavaScript ile sinirli olurdu.

Aha # 2: Kalıtımın birçok yolla uygulanabileceğini anlamak. Tipik sınıf temelli miras sadece bir tanesidir. Prototip tabanlı (JavaScript'te kullanılan stil) başkaları da var.

# 1 ile ilgili olarak, JavaScript: İyi Parçalar'ı önermeye dayanamıyorum . JavaScript'i kendi başına iyi bir dil olarak ele alır.


0

Hiçbir blok kapsamı ve kaldırma.

foo(); // function executes, no error

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


-1

jQuery temelde benim için 'a-ha' anıydı. Sözdizimi, C # 'da LINQ / lambda sözdizimi ile çok fazla deneyim kazandıktan sonra tanıdık geldi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.