มีความแตกต่างอย่างมากระหว่างการสืบทอดของจาวาสคริปต์และมรดก OOP มาตรฐาน Prototype.superClass = C.SuperClass = P.Prototype;
เมื่อ var c = ใหม่ c (), c .__ proto__ = c.prototype;
เมื่อไม่สามารถเข้าชมได้ "ตัวแปรสมาชิก" หาก __proto__ ไม่สามารถรับได้คุณจะไปที่ C.Prototype เพื่อค้นหา และอื่น ๆ ได้รับการจัดสรรในระหว่างการกำหนด (แต่ละวัตถุถูกแชร์) การแก้ไขจะถูกแชร์โดยอินสแตนซ์วัตถุทั้งหมดซึ่งละเมิดความตั้งใจดั้งเดิมของการออกแบบชั้นเรียน
ตัวอย่างเช่น:
คัดลอกรหัสรหัสดังนี้:
'package'.j (function () {
'class a'.j (function () {
jpublic ({{{{
V: {a: 1}
-
jprivate ({{
P: {a: 1}
-
JProtect ({{
x: {a: 1}
-
-
'คลาส B ขยาย a'.j (function () {
-
-
var b1 = ใหม่ b ();
b1.va = 5;
b1.xa = 5;
var b2 = ใหม่ b ();
console.log (b1.va) // เอาต์พุตเป็น 5
console.log (b1.xa) // เอาต์พุตเป็น 5
console.log (b2.va) // เอาท์พุทก็เป็น 5 ไม่คาดหวัง 1
console.log (b2.xa) // เอาต์พุตเป็น 1
console.log (b2.pa) // ไม่สามารถทำได้มันจะแจ้งให้ P โดยไม่มีการดำรงอยู่
วิธีแก้ปัญหานี้?
A. "ตัวแปรสมาชิก" (ตัวเองเป็นวัตถุในตัวเอง) เช่น V ไม่ได้กำหนดไว้ในห่วงโซ่ดั้งเดิม แต่เรียกว่าในตัวสร้าง __proto__.
JS ++ ให้วิธีการที่คล้ายกันตราบใดที่ "ตัวแปรสมาชิก" หรือ "ฟังก์ชั่นสมาชิก" ที่กำหนดไว้ใน JPrivate จะถูกจัดสรรบน __proto__ ด้านนอกและเฉพาะอินสแตนซ์นี้เท่านั้น
B. "ตัวแปรสมาชิก" อ่านเฉพาะอ่านเฉพาะในห่วงโซ่ต้นแบบ (เป็นวัตถุในตัวเอง)
สมาชิกของ "ตัวแปรสมาชิก" (ตัวเองเป็นวัตถุ) ที่กำหนดโดย C.Jpublic เพียงอ่านสมาชิกเท่านั้นจำไว้ว่าไม่ได้รับมอบหมายมิฉะนั้นจะถูกแชร์ในหลายกรณี