Khi học JS, khoảnh khắc Aha của bạn là gì? [đóng cửa]


16

Bạn có nhớ khi bạn học JavaScript không? Khoảnh khắc mà bạn đột nhiên "hiểu" là gì? (Ví dụ: khoảnh khắc CSS của tôi là khi tôi biết về mô hình hộp ...)

Lý do tôi yêu cầu là tôi đã học được JS trong 6 tuần, nhưng tôi vẫn thấy nó khá khó hiểu. Đây là trích dẫn từ một cái gì đó tôi đọc gần đây trên SO:

".. các hàm hoạt động tương tự như các giá trị, vì phương thức là một thuộc tính của đối tượng có giá trị của hàm (cũng là một đối tượng)."

Tôi tò mò nếu bạn cũng bối rối ngay từ đầu và điều gì đã khiến bạn hiểu nó.

(Tôi đang đọc các Sitepoints "Simply JavaScript", cuốn sách "Eloquent JavaScript" và làm theo hướng dẫn về JavaScript cần thiết của Lynda. Tôi không có bất kỳ lập trình nào và rất giỏi toán;)

Cảm ơn!


1
Tôi thấy câu trích dẫn khó hiểu và không rõ ràng là trung thực và tôi đã sử dụng JavaScript trong một số năm, vì vậy tôi không ngạc nhiên nếu nó gây nhầm lẫn cho một người mới sử dụng ngôn ngữ này :)
Russ Cam

Trích dẫn và nhầm lẫn đang đến bởi vì trích dẫn đó đang cố gắng nói rằng các chức năng là đối tượng hạng nhất trong javascript. Tiếp tục đập mạnh, và bạn sẽ cung cấp cho mình nguồn gốc của những khoảnh khắc 'a-ha': Khung tham chiếu bổ sung.
chiggsy

Câu trả lời:


15

Tôi nghĩ rằng khoảnh khắc "AHA" lớn nhất đối với tôi là khi tôi hoàn toàn nắm bắt được những điều sau đây:

Giá trị biến có thể là bất cứ thứ gì, bao gồm các hàm

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

Tôi đồng ý với những gì một số câu trả lời khác đã chạm vào; Khoảnh khắc A-ha đối với tôi là khi tôi hiểu thế nào là đóng cửa .

Tôi đã đăng một câu trả lời cho câu hỏi Đóng cửa là gì? để giúp giải thích điều này.

Không hiểu các cách đóng, Javascript là một ngôn ngữ khá hạn chế, với một vài tính năng cú pháp tốc ký đẹp mắt như []cho mảng và JSON ( {}cho các đối tượng) và trong ngữ cảnh của trình duyệt, DOM ( window/ document).

Tuy nhiên, một khi bạn hiểu được sự đóng cửa, rất nhiều sự hiểu biết rơi vào vị trí :

  • Những gì một nguyên mẫu thực sự là ( xem ở đây )
  • Tại sao các nguyên mẫu là chìa khóa cho OOP trong Javascript ( xem tại đây )
  • Làm thế nào hầu hết các trình xử lý sự kiện trong Javascript thực sự hoạt động (nó có thể giống như phép thuật mà không hiểu các bao đóng)
  • Cách tiết kiệm cho mình rất nhiều mã (và / hoặc thời gian) với các cuộc gọi lại

Tài nguyên


4

Tôi nghĩ ngôn ngữ thiết yếu nhất 'Aha dành cho tôi trong Javascript là

  • Chức năng như các đối tượng
  • Đóng cửa
  • Định hướng đối tượng dựa trên nguyên mẫu
  • Phạm vi trong JavaScript

Đối với tất cả các chủ đề này, bạn nên tìm thấy nhiều tài nguyên trên web.

(Và đừng nghĩ mọi thứ sẽ trở nên hoàn toàn hợp lý: Javascript khó hiểu)


Có thật không? JavaScript khó hiểu không? Đối với tôi tất cả có vẻ khá tự nhiên. Nhưng đó chỉ là tôi :-P.
Htbaa

3

javascript rất khó đối với tôi khi tôi mới bắt đầu học nó vài năm trước bởi vì lần đầu tiên tôi bắt đầu học phát triển web từ đầu máy chủ (php và perl).

Đó không phải là quá nhiều cú pháp hay OOP hay bất cứ điều gì đã lảng tránh tôi, ví dụ như tính năng trực tiếp và hướng sự kiện của javascript - đi từ "làm cái này và cái này và cái này và phục vụ nó và bạn đã hoàn thành" để "làm điều này và cái này và cái này và sau đó chúng ta luôn trong trạng thái chờ đợi điều gì đó xảy ra và phản hồi cho đến khi người dùng rời khỏi trang ". Điều đó thực sự đã ném tôi cho một vòng lặp.

Tôi không nghĩ rằng tôi có thể đặt tên bất cứ thứ gì cụ thể thực sự khiến nó chìm vào (không có khoảnh khắc "aha!" Dứt khoát - nếu tôi phải đặt tên cho một khoảnh khắc cụ thể, tôi sẽ nói khi tôi học AJAX cho một kịch bản gợi ý tìm kiếm, nhưng IMO chỉ là tùy ý) nhưng cuối cùng khi tôi đã nắm được sự khác biệt, mọi thứ trở nên dễ dàng hơn rất nhiều từ đó :)


Một số hướng thực sự tốt ở đây đã, cảm ơn tất cả mọi người!

1

Cuối cùng khi tôi nắm bắt được ý tưởng rằng tôi có thể định nghĩa lại bất kỳ phần nào của ngôn ngữ thành bất cứ thứ nhảm nhí nào tôi muốn. Về mặt này, nó thậm chí còn mạnh hơn C. Ví dụ, nếu tôi không thích toString()chức năng tiêu chuẩn , thì tôi sẽ tự thực hiện:

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

Làm thế nào là điều này thực sự khác với ghi đè?
Nicole

1

Khi tôi nhận ra rằng bạn có thể đặt thuộc tính trên một đối tượng hàm.

Ngoài ra khi cuối cùng tôi đã hiểu nguyên mẫu là gì.

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

Và khoảnh khắc a-ha khi cuối cùng bạn cũng nắm bắt được những kết quả này.


0

Đối với tôi, khoảnh khắc số 1 của Aha: Nhận ra rằng JavaScript, ngôn ngữ, khác với cách sử dụng chính của nó: HTML động và lập trình web phía máy khách. Tôi sẽ thất vọng với JavaScript, khi tôi thực sự thất vọng với sự không tương thích của DOM và trình duyệt.

Aha khoảnh khắc # 2: Hiểu rằng sự kế thừa có thể được thực thi theo nhiều cách. Kế thừa dựa trên lớp điển hình chỉ là một. Có những cái khác, cụ thể là dựa trên nguyên mẫu (kiểu được sử dụng trong JavaScript).

Đối với # 1, tôi không thể cưỡng lại việc giới thiệu JavaScript: Các bộ phận tốt . Nó coi JavaScript như một ngôn ngữ tốt theo đúng nghĩa của nó.


0

Không có phạm vi khối và cẩu.

foo(); // function executes, no error

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

0

Đó chỉ là sơ đồ với cú pháp.

Đó là một trong những lớn cho tôi.


-1

jQuery về cơ bản là khoảnh khắc 'a-ha' đối với tôi. Cú pháp cảm thấy quen thuộc sau khi có nhiều kinh nghiệm với cú pháp LINQ / lambda trong C #.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.