สาเหตุ
ฉันใช้ Prototype.js ในวันนั้นดังนั้นฉันจึงเปิดมันเพื่อดูว่าฉันเห็นเส้นสองสามเส้นและหมอก
Fragment รหัส propotype.js
รหัสมีดังนี้:
var class = {
สร้าง: function () {
return function () {
this.initialize.apply (นี่, ข้อโต้แย้ง);
-
-
-
// วิธีการใช้คลาสมีดังนี้
var a = class.create ();
A. prototype = {
เริ่มต้น: ฟังก์ชั่น (v) {
สิ่งนี้
-
showValue: function () {
การแจ้งเตือน (this.value);
-
-
var a = new a ('helloord!');
.
l เริ่มต้น?
วิธีการใช้ l ทำอะไร?
L อาร์กิวเมนต์ตัวแปร?
l ทำไมวิธีการเริ่มต้นจึงถูกดำเนินการหลังจาก A ใหม่ A?
ค้นหาคำตอบ:
ประการที่สอง JS กำหนดเป้าหมายวัตถุ
เริ่มต้นคืออะไร?
มันเป็นเพียงตัวแปรแทนวิธีการและการใช้เป็นตัวสร้างของคลาส
ฟังก์ชั่นเฉพาะได้รับการสนับสนุนโดย JS ดังนั้นวัตถุของ JS คืออะไร? อะไรคือสิ่งที่เหมือนกันและแตกต่างจาก Java?
ดูรหัส:
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
var className = function (v) {{
this.value = v;
this.getValue = function () {
คืนค่านี้;
-
this.setValue = function (v) {
this.value = v;
-
-
ดังนั้นความแตกต่างระหว่างฟังก์ชั่นและคลาสใน JS คืออะไร?
ในความเป็นจริงมันเหมือนกัน
ชอบ
รหัสมีดังนี้:
VAR ObjectName1 = new className ("A");
ในหมู่พวกเขา ObjectName1 เป็นวัตถุที่ได้รับหลังจากดำเนินการ className constructor และสิ่งนี้ในฟังก์ชั่น className หมายถึงวัตถุที่สร้างขึ้นหลังจากใหม่ดังนั้น ObjectName1 จะมีแอตทริบิวต์หนึ่งและสองวิธีหลังจากดังต่อไปนี้ คุณสามารถเรียกพวกเขาผ่านสิ่งนี้:
รหัสมีดังนี้:
ObjectName1.SetValue ('' Hello '');
Alert (ObjectName1.getValue ());
การแจ้งเตือน (ObjectName1.Value);
ดังนั้น
รหัสมีดังนี้:
var objectName2 = className ("B");
แล้ว ObjectName2 ได้อะไร? เห็นได้ชัดว่าค่าการส่งคืนของวิธีการที่นี่ชื่อคลาสจะใช้เป็นฟังก์ชันธรรมดาเท่านั้น (แม้ว่าตัวอักษรตัวแรกจะเป็นตัวพิมพ์ใหญ่) แต่ไม่มีค่าส่งคืนในชื่อคลาสก่อนหน้าดังนั้น ObjectName2 จะไม่ได้รับผลกระทบดังนั้นใครจะ "B" ให้? ไม่มีวัตถุที่นี่ แต่เพียงแค่ทำวิธีนี้เพียงแค่ "B" นี้ถูกกำหนดให้กับหน้าต่างวัตถุที่เรียกวิธีนี้
var objectName2 = className ("B");
การแจ้งเตือน (window.value);
ดังนั้นฟังก์ชั่นทั้งหมดใน JS จึงเหมือนกัน แต่การใช้งานอาจแตกต่างกัน (ใช้สำหรับการสร้างวัตถุหรือดำเนินการกระบวนการ)
ลองกลับไปที่ธีมว่าการเริ่มต้นทำอะไรอยู่?
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
var class = {
สร้าง: function () {
return function () {
this.initialize.apply (นี่, ข้อโต้แย้ง);
-
-
-
var a = class.create ();
รหัสนี้คือการสร้างฟังก์ชั่นคัดลอกไปยัง A ฟังก์ชั่นนี้คือ
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
การทำงาน () {
this.initialize.apply (นี่, ข้อโต้แย้ง);
-
และวิธีหลังใช้ในการสร้างตัวสร้าง เมื่อใช้คอนสตรัคเตอร์นี้เพื่อสร้างวัตถุมันจะปล่อยให้วิธีการเริ่มต้น () ของตัวแปรเริ่มต้นของตัวแปรของคอนสตรัคเตอร์ดำเนินการเมธอด Apply () ด้วยวิธีนี้จะได้รับการติดต่อเมื่อวัตถุเริ่มต้น (วิธีการติดต่อผู้ใช้)
ดังนั้น
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
A.prototype = {
เริ่มต้น: ฟังก์ชั่น (v) {
สิ่งนี้
-
showValue: function () {
การแจ้งเตือน (this.value);
-
-
หมายความว่าอย่างไร?
ต้นแบบหมายถึง "ต้นแบบ" A คือฟังก์ชัน () จากนั้น A. ต้นแบบเป็นตัวแปรในฟังก์ชันซึ่งเป็นวัตถุจริง วัตถุนี้มีวิธีใดดังนั้นวัตถุที่สร้างโดยฟังก์ชั่นวิธีใด
var a = new a ('helloord!');
.
ดังนั้นวัตถุ A จะมีวิธีการเริ่มต้น '), เริ่มต้นกลับไปเรียกวิธีการสมัคร นี่คือวิธีการเรียกการเริ่มต้น
3. โทร () และสมัคร ()
เริ่มเรียน () ค้นหาข้อมูลออนไลน์สองสามรายการและรวมการวิจัยของคุณเองเพื่อทำความเข้าใจฟังก์ชั่นการโทร () และสมัคร ()功能基本一样, function (). การเรียก (วัตถุ, {}, {} ……) 或者 function (). ใช้ (วัตถุ, [……]) 的功能就是对象 Object 调用这里的 funciton (), 不同之处是不同之处是不同之处是不同之处是不同之处是不同之处是不同之处是พารามิเตอร์การโทรจะถูกส่งผ่านไปยัง Funciton จากครั้งที่สอง Apply มีพารามิเตอร์เพียงสองตัวและที่สองคืออาร์เรย์ซึ่งเก็บพารามิเตอร์ทั้งหมดที่ส่งผ่านไปยังฟังก์ชั่น
this.initialize.apply (นี่, ข้อโต้แย้ง);
หมายความว่าอย่างไร?
ครั้งแรกที่นี่หมายถึงวัตถุที่สร้างขึ้นหลังจากเรียกคอนสตรัคเตอร์ด้วยการโทรใหม่ซึ่งเป็น A ก่อนหน้านี้แล้วแน่นอนว่าครั้งที่สองนี้ควรอ้างถึงวัตถุเดียวกัน จากนั้นประโยคนี้คือสิ่งนี้ (นั่นคือ a) เพื่อเรียกใช้วิธีการเริ่มต้นและพารามิเตอร์เป็นวัตถุอาร์กิวเมนต์ (จำนวนอาร์เรย์ของพารามิเตอร์)
ดังนั้นจะผ่านพารามิเตอร์ของวิธีการเริ่มต้นได้อย่างไร?
ประการที่สี่อาร์กิวเมนต์วัตถุ
รหัสนี้สามารถอธิบายทุกอย่าง:
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
ฟังก์ชั่นทดสอบ () {
การแจ้งเตือน (อาร์กิวเมนต์ typeof);
สำหรับ (var i = 0; i <arguments.length; i ++) {
การแจ้งเตือน (อาร์กิวเมนต์ [i]);
-
-
ทดสอบ ("1", "2", "3");
ทดสอบ ("A", "B");
หลังจากดำเนินการแจ้งเตือน (อาร์กิวเมนต์ typeof); จากนั้นเล่น 1, 2 และ 3 ในทางกลับกัน อธิบายว่าอาร์กิวเมนต์เป็นอาร์เรย์ที่มั่นคงของการเรียกใช้ฟังก์ชัน
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังนี้:
var class = {
สร้าง: function () {
return function () {
this.initialize.apply (นี่, ข้อโต้แย้ง);
-
-
-
อาร์กิวเมนต์เป็นอาร์เรย์ที่มั่นคงของตัวสร้างที่ส่งคืนโดยการสร้างดังนั้น
var a = new a ('helloord!');
ในช่วงเวลาของ 'Hellooword!' เป็นกลุ่มพารามิเตอร์ที่เป็นของแข็ง (แม้ว่าจะมีเพียงหนึ่งสตริง) ที่นำไปใช้กับวิธีการที่ใช้แล้วส่งผ่านไปยังฟังก์ชั่นการเริ่มต้นเริ่มต้นเป็นพารามิเตอร์เมื่อเรียกเริ่มต้น