แต่ละฟังก์ชันมีคุณลักษณะต้นแบบที่เรียกว่าต้นแบบ แต่ละออบเจ็กต์ยังมีต้นแบบซึ่งสามารถเข้าถึงได้ผ่าน __proto__ ใน Firefox/Safari/Chrome/Opera ไม่มีอินเทอร์เฟซที่เกี่ยวข้องใน IE6/7/8
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่นบุคคล () {
นี้.method1 = ฟังก์ชั่น(){}
-
Person.prototype.method2 = ฟังก์ชั่น(){}
ฟังก์ชั่นแมน(){}
Man.prototype = บุคคลใหม่ ();
Man.prototype.m1 = ฟังก์ชัน(){}
Man.prototype.m2 = ฟังก์ชัน(){}
var m = คนใหม่();
สำหรับ (var a ใน m.__proto__){
การแจ้งเตือน (ก);
-
Person คลาสพาเรนต์และคลาสย่อย Man ถูกกำหนดไว้ สร้างวัตถุ Man ใหม่ และพิมพ์คุณสมบัติทั้งหมดออกมา
ECMAScript V5 เพิ่มเมธอด getPrototypeOf แบบคงที่ให้กับ Object (ใช้งานโดย Firefox/Chrome) เพื่อรับต้นแบบของออบเจ็กต์ สามารถใช้เลียนแบบ super ของ Java ได้
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่นบุคคล () {
this.method1 = ฟังก์ชั่น () {การแจ้งเตือน (1)}
-
Person.prototype.method2 = function(){alert(2);}
ฟังก์ชั่นแมน () {
นี้.m1 = ฟังก์ชั่น(){
Object.getPrototypeOf(นี้).method1();
-
-
Man.prototype = บุคคลใหม่ (); // การสืบทอดต้นแบบ
Man.prototype.m2 = ฟังก์ชั่น(){
Object.getPrototypeOf(นี้).method2();
-
var man = คนใหม่();
คน.m1();
คน.m2();
เมธอด m1 ที่ค้างอยู่บนคลาสย่อย Man เรียก method1 ที่ค้างอยู่บนสิ่งนี้ในคลาสพาเรนต์ Person และวิธีการ m2 ที่ค้างอยู่บนต้นแบบจะเรียก method2 บนต้นแบบคลาสพาเรนต์
จะเห็นได้จากด้านบนว่าต้นแบบของวัตถุไม่เพียงแต่รวมคุณลักษณะบนต้นแบบตัวสร้างเท่านั้น แต่ยังรวมถึงคุณลักษณะของสิ่งนี้ในตัวสร้างด้วย แน่นอน เนื่องจากเหตุผลทางบริบทใน JavaScript สิ่งนี้ในคลาสพาเรนต์จึงไม่สามารถแปลงในคลาสย่อยได้โดยอัตโนมัติ และต้องใช้ทักษะบางอย่างจึงจะสำเร็จ
นี่คือวิธีการทำงานใน Java
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ bao1;
บุคคลในชั้นเรียน {
ชื่อสตริงส่วนตัว
บุคคล (ชื่อสตริง) {
this.name = ชื่อ;
-
โมฆะสาธารณะ method1 () {
System.out.println(this.name);
-
-
คลาส Man ขยายบุคคล {
ผู้ชาย(ชื่อสตริง) {
ซุปเปอร์(ชื่อ);
-
โมฆะสาธารณะ m1() {
ซุปเปอร์.method1();
-
-
การทดสอบชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
ผู้ชาย man1 = ผู้ชายใหม่ ("แจ็ค");
man1.m1();
-
-