หลังจากเรียนรู้ภาษาที่มุ่งเน้นวัตถุแบบดั้งเดิมเช่น Java C ++ ฉันรู้สึกอึดอัดเล็กน้อยเมื่อฉันถ่ายโอนไปยัง JavaScript โดยเฉพาะอย่างยิ่งฟังก์ชั่นวัตถุที่เรียกว่าใน JavaScript ซึ่งบางครั้งฉันก็สับสน ดังนั้นฉันจึงได้จัดเรียงสิ่งที่มีแนวคิดด้านล่างเพื่ออำนวยความสะดวกในการเรียนรู้และความเข้าใจและจะอธิบายพวกเขาร่วมกับความรู้เชิงวัตถุ Java บางอย่าง
ก่อนอื่นให้เข้าใจแนวคิดบางประการ:
1. ก่อนอื่นวัตถุอ้างถึงอะไรใน ecmascript? มี 5 ประเภทข้อมูลง่าย ๆ ใน eCmascript: undefined, null, บูลีน, ตัวเลข, สตริง นอกจากนี้ยังมีชนิดข้อมูลที่ซับซ้อนนั่นคือวัตถุ
2. ประเภทอ้างอิง-แนวคิดของคลาสใน Java
ค่าประเภทอ้างอิง --- แนวคิดของวัตถุใน Java
3. ฟังก์ชั่น ---- แนวคิดของวิธีการใน Java
4.VAR --- ประกาศตัวแปรของตัวแปร เนื่องจากตัวแปร JS นั้นเป็นแบบหลวมจึงหมายความว่าสามารถใช้เพื่อบันทึกข้อมูลใด ๆ ตัวแปรใช้เพื่อเป็นตัวแทนของตัวยึดเท่านั้นดังนั้นตัวแปรไม่จำเป็นต้องระบุสตริง, int และเพียง var โปรดทราบว่าวัตถุสามารถประกาศด้วย var
5.Object () คืออะไร --- ตัวสร้างวัตถุใน Java ตัวสร้างวัตถุใน JS
วัตถุ
JS สามารถเพิ่มคุณสมบัติและวิธีการแบบไดนามิก
ตัวอย่างเช่นสร้างอินสแตนซ์วัตถุ
var obj = new Object();
ตัวแปร OBJ เป็นวัตถุของวัตถุใหม่ ()
ต่อไป:
var obj = วัตถุใหม่ (); obj.name = 'zeng'; obj.age = 12; obj.fun = function () {console.log (this.name+this.age);}แต่นี่ไม่ใช่การห่อหุ้มมากนักดังนั้นการเป็นตัวแทนตามตัวอักษรของวัตถุจึงมักถูกนำมาใช้มากขึ้น
var obj = {ชื่อ: 'zeng', อายุ: 12, fun: function () {console.log (this.name+this.age); }} obj.fun (); // พิมพ์ออกมา: zeng12การเข้าถึงคุณสมบัติวัตถุ:
1. ใช้วงเล็บ
console.log(obj["name"]);
2. ใช้คะแนนแนะนำให้ใช้วิธีนี้
console.log(obj.name );
การทำงาน
ฟังก์ชั่นเป็นส่วนสำคัญของภาษาใด ๆ ฟังก์ชั่นเรียกว่า JS คุณยังสามารถเข้าใจได้ว่าพวกเขาเป็นวิธี Java และฟังก์ชั่นภาษา C เหมือนกันทั้งหมด อย่างไรก็ตามในแง่ของการประกาศและการใช้งานฟังก์ชั่นของ JS อาจแตกต่างกันมาก
ตัวอย่างของฟังก์ชั่น:
ฟังก์ชั่น fun () {return "ตัวอย่าง";} console.log (fun ()); // เอาต์พุต: 'ตัวอย่าง'นอกจากนี้ยังเป็นไปได้:
var fun = function () {return "สร้างฟังก์ชั่นโดยใช้นิพจน์"}; console.log (fun ()); // เอาต์พุต: "สร้างฟังก์ชั่นโดยใช้นิพจน์"ในตัวอย่างข้างต้นคุณจะสังเกตเห็นว่าฟังก์ชั่นไม่มีชื่อฟังก์ชั่นมีเพียงหนึ่งชื่อตัวแปรที่สนุกและมีอีกชื่อหนึ่งในตอนท้ายของนิพจน์ อัฒภาค,
คุณสามารถเข้าใจว่ามันเป็นนิพจน์ที่ประกาศตัวแปร การประกาศตัวแปรอื่น ๆ นั้นเขียนขึ้นเช่นนี้:
var name = "Zeng"; // มีชื่อตัวแปรและเครื่องหมายอัฒภาค
ลองมาตัวอย่างด้วยพารามิเตอร์:
ฟังก์ชั่น fun () {return arguments [0] + อาร์กิวเมนต์ [1] + อาร์กิวเมนต์ [2];} console.log (ความสนุก ("นี่คือ", "a", "ตัวอย่าง")); // เอาต์พุต: "นี่เป็นตัวอย่าง"มันไม่แปลกเลยเหรอ? ก่อนอื่นฟังก์ชั่นที่ฉันสร้างไม่มีพารามิเตอร์ มันจะได้รับพารามิเตอร์เมื่อเรียกและพารามิเตอร์สามารถรับและส่งคืนในฟังก์ชัน
ที่จริงแล้วที่นี่เราต้องทำให้จุดที่ฟังก์ชั่น JS ไม่รังเกียจที่จะผ่านในพารามิเตอร์สองสามตัวและไม่สนใจว่าพารามิเตอร์ประเภทใด! เหตุผลก็คือพารามิเตอร์การรับภายในของฟังก์ชั่นจะถูกเก็บไว้ในอาร์เรย์!
อาร์เรย์เป็นข้อโต้แย้งด้านบน แน่นอนอาร์เรย์ไม่สนใจพารามิเตอร์สองสามตัวหากมีพารามิเตอร์ฉันจะเพิ่มหนึ่งอันและหากไม่มีพารามิเตอร์ฉันจะเป็นโมฆะ
เราสามารถใช้คุณสมบัตินี้เป็นตัวอย่าง:
การใช้วิธีการเลียนแบบมากเกินไป-ใช้พารามิเตอร์ที่แตกต่างกันเพื่อดำเนินการปฏิกิริยาที่แตกต่างกัน
ฟังก์ชั่น fun () {ถ้า (arguments.length == 1) {return arguments [0]*10; } if (arguments.length == 2) {return (อาร์กิวเมนต์ [0]+อาร์กิวเมนต์ [1])*10; } return 10;} console.log (ความสนุก (11,111)); // กลับ 1220! - - -ไม่มีการโอเวอร์โหลด:
ตัวอย่างข้างต้นคือฟังก์ชั่นการเลียนแบบมากเกินไป ทำไมฉันต้องเลียนแบบมัน? ฉันจะสามารถสร้างฟังก์ชั่นหลายอย่างด้วยพารามิเตอร์ที่แตกต่างกันในไม่ช้า
ฟังก์ชั่นความสนุก (num1) {return "fun with เพียงพารามิเตอร์เดียว"} ฟังก์ชั่นความสนุก (num1, num2) {return "ความสนุกด้วยสองพารามิเตอร์";} console.log (ความสนุก (11)); // เอาท์พุท "ความสนุกด้วยพารามิเตอร์สองตัว"มันเรียกได้อย่างชัดเจนว่าฟังก์ชั่นที่มีพารามิเตอร์หนึ่งพารามิเตอร์ แต่มันถูกดำเนินการด้วยพารามิเตอร์สองตัว เหตุผล: JS กำหนดฟังก์ชั่นสองฟังก์ชั่นที่มีชื่อเดียวกันและชื่อเป็นของฟังก์ชั่นที่กำหนดไว้ในภายหลังเท่านั้น! - - ดังนั้นจึงไม่มีคุณสมบัติการโอเวอร์โหลดใน JS
ชื่อฟังก์ชันคือตัวชี้:
var fun = function (num1, num2) {return num1+num2;}; var new_fun = fun; fun = null; // ตั้งค่าฟังก์ชันเป็น nullconsole.log (new_fun (10,20)); // ผลลัพธ์: 30console.log (ความสนุก (10,20)); // ข้อยกเว้น: ความสนุกไม่ใช่ฟังก์ชั่นจะเห็นได้ว่าถึงแม้จะสนุก = null; ก่อนหน้านี้ var new_fun = fun; นั่นคือตัวชี้ยังชี้ไปที่ new_fun ดังนั้นฟังก์ชั่น new_fun () ยังสามารถดำเนินการได้และร่างกายฟังก์ชั่นไม่ได้เป็นโมฆะ
ฟังก์ชั่นสามารถใช้เป็นค่า:
ฟังก์ชั่นเพิ่ม (fun, num) {return fun (num);} ฟังก์ชั่น add_10 (num) {return num+10;} console.log (เพิ่ม (add_10,200)); // เอาท์พุท: 210สามารถอธิบายได้ดังนี้:
ฟังก์ชั่นเพิ่ม (ฟังก์ชั่นพารามิเตอร์) {ฟังก์ชั่นการส่งคืน (พารามิเตอร์ที่ผ่าน);}อาร์กิวเมนต์. callee ของฟังก์ชัน
นี่คือตัวอย่างแบบเรียกซ้ำ
ฟังก์ชั่นสนุก (num) {ถ้า (num <= 1) {console.log (num); กลับ 1; } else {console.log (num); return num * arguments.callee (num-1); }} console.log (ความสนุก (3)); // เอาต์พุต 6