แม้ว่า JavaScript ไม่ได้ให้คำหลักที่สืบทอดมา แต่เรายังสามารถหาวิธีที่ดีในการใช้งานได้
1. การสืบทอดโซ่ต้นแบบ:
การคัดลอกรหัสมีดังนี้:
var base = function ()
-
this.level = 1;
this.name = "base";
this.toString = function () {
กลับ "ฐาน";
-
-
base.constant = "คงที่";
var sub = function ()
-
-
sub.prototype = ฐานใหม่ ();
sub.prototype.name = "sub";
ข้อดี: การตัดสินจากคำหลักอินสแตนซ์อินสแตนซ์เป็นทั้งอินสแตนซ์ของคลาสแม่และอินสแตนซ์ของคลาสเด็กซึ่งดูเหมือนจะเป็นมรดกที่บริสุทธิ์ที่สุด
ข้อเสีย: คลาสย่อยแตกต่างจากคุณสมบัติและวิธีการของคลาสแม่ พวกเขาจะต้องดำเนินการแยกต่างหากหลังจากคำสั่งเช่น sub.prototype = new base (); และไม่สามารถห่อเข้าไปในตัวสร้างย่อย ตัวอย่างเช่น: sub.prototype.name = "sub"; ไม่สามารถสืบทอดหลายมรดกได้
2. สร้างมรดก:
การคัดลอกรหัสมีดังนี้:
var base = function ()
-
this.level = 1;
this.name = "base";
this.toString = function () {
กลับ "ฐาน";
-
-
base.constant = "คงที่";
var sub = function ()
-
base.call (นี่);
this.name = "sub";
-
ข้อดี: สามารถนำมาใช้หลายมรดกและคุณลักษณะที่ไม่ซ้ำกันกับคลาสย่อยสามารถตั้งค่าภายในตัวสร้าง
ข้อเสีย: การใช้อินสแตนซ์ของวัตถุพบว่าวัตถุไม่ใช่อินสแตนซ์ของคลาสแม่
3. การสืบทอดอินสแตนซ์:
การคัดลอกรหัสมีดังนี้:
var base = function ()
-
this.level = 1;
this.name = "base";
this.toString = function () {
กลับ "ฐาน";
-
-
base.constant = "คงที่";
var sub = function ()
-
var อินสแตนซ์ = ใหม่ฐาน ();
instance.name = "sub";
อินสแตนซ์กลับ;
-
ข้อดี: มันเป็นวัตถุของคลาสแม่และเอฟเฟกต์เดียวกันสามารถรับได้โดยใช้ใหม่เพื่อสร้างวัตถุและโดยไม่ต้องใช้ใหม่เพื่อสร้างวัตถุ
ข้อเสีย: วัตถุที่สร้างขึ้นเป็นอินสแตนซ์ของคลาสแม่ไม่ใช่วัตถุย่อย ไม่รองรับการสืบทอดหลายครั้ง
4. คัดลอกมรดก:
การคัดลอกรหัสมีดังนี้:
var base = function ()
-
this.level = 1;
this.name = "base";
this.toString = function () {
กลับ "ฐาน";
-
-
base.constant = "คงที่";
var sub = function ()
-
var base = ฐานใหม่ ();
สำหรับ (var i ในฐาน)
sub.prototype [i] = base [i];
sub.prototype ["name"] = "sub";
-
ข้อดี: รองรับการสืบทอดหลายครั้ง
ข้อเสีย: ประสิทธิภาพต่ำ; ไม่สามารถรับวิธีการที่ไม่สามารถระบุได้โดยคลาสหลัก
แบบฟอร์มเหล่านี้มีลักษณะของตัวเองและเฉพาะในแง่ของรหัสที่ฉันให้ไว้พวกเขาตอบสนองตารางต่อไปนี้:
2012-1-10: เพิ่มถ้าเราไม่ต้องการมรดกในชั้นเรียนเราต้องการการสืบทอดวัตถุเท่านั้น สำหรับเบราว์เซอร์ที่รองรับ ECMASCRIPT 5 เรายังสามารถใช้วิธีการสร้าง Object.create เพื่อนำไปใช้:
การคัดลอกรหัสมีดังนี้:
var base = function ()
-
this.level = 1;
this.name = "base";
this.toString = function () {
กลับ "ฐาน";
-
-
base.constant = "คงที่";
var sub = object.create (ฐานใหม่ ());
sub.name = "sub";