ในบทความที่แล้ว ฉันเขียน tool function $class และบทความนี้จะปรับปรุงดังนี้ ใช้ฟังก์ชันต่อไปนี้
1. มรดก
2. เมื่อคลาสย่อยสืบทอดมาจากคลาสพาเรนต์ คลาสย่อยนั้นจะไม่สืบทอดคุณลักษณะส่วนตัวของคลาสพาเรนต์
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* @param {สตริง} ชื่อคลาส
* @param {สตริง/ฟังก์ชัน} superCls
* @param {ฟังก์ชัน} classImp
-
ฟังก์ชั่น $class(className, superCls, classImp){
ถ้า (superCls === '') superCls = วัตถุ;
functionclazz(){
ถ้า (ประเภทของ this.init == "ฟังก์ชั่น"){
this.init.apply (สิ่งนี้ ข้อโต้แย้ง);
-
-
var p = clazz.prototype = superCls ใหม่ ();
var _super = superCls.ต้นแบบ;
หน้าต่าง [ชื่อคลาส] = clazz;
classImp.apply(p, [_super]);
-
ขั้นแรกให้เขียนคลาสผู้ปกครอง
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* บุคคลระดับผู้ปกครอง
-
$class('บุคคล','',function(){
// อายุแอตทริบิวต์ส่วนตัว
อายุต่างกัน;
this.init = ฟังก์ชั่น (n, a) {
//ชื่อแอตทริบิวต์สาธารณะ
นี้.ชื่อ = n;
// การเริ่มต้นคุณสมบัติส่วนตัว
อายุ = ก;
-
this.getName = ฟังก์ชั่น(){
ส่งคืน this.name;
-
this.setName = ฟังก์ชั่น (ชื่อ) {
this.name = ชื่อ;
-
this.getAge = ฟังก์ชั่น(){
อายุกลับ;
-
this.setAge = ฟังก์ชั่น (ก) {
อายุ = ก;
-
-
เขียนคลาสย่อยสืบทอดจากบุคคล
คัดลอกรหัสรหัสดังต่อไปนี้:
$class("Man",บุคคล,ฟังก์ชั่น(supr){
โรงเรียนวาร์;
this.init = ฟังก์ชั่น (n, a, s) {
supr.init.apply(นี่, [n,a]);
โรงเรียน = ส;
-
this.getSchool = ฟังก์ชั่น(){
กลับไปโรงเรียน
-
this.setSchool = ฟังก์ชั่น {
โรงเรียน = ส;
-
-
สร้างอินสแตนซ์คลาสย่อยใหม่
คัดลอกรหัสรหัสดังต่อไปนี้:
var m = ผู้ชายคนใหม่ ('ทอม', 25, 'pku');
console.log(m.name); // Tom สืบทอดชื่อแอตทริบิวต์ทั่วไปของคลาสพาเรนต์ และสามารถใช้ตัวดำเนินการ dot เพื่อรับมันได้โดยตรง
console.log(m.age); // undef ไม่สามารถรับอายุทรัพย์สินส่วนตัวของคลาสพาเรนต์ได้โดยตรงโดยใช้ตัวดำเนินการ dot
console.log(m.getAge()); // 25 อายุแอตทริบิวต์ส่วนตัวสามารถรับได้ผ่านวิธีสาธารณะ getAge ของคลาสพาเรนต์
console.log(m.school); // คุณสมบัติส่วนตัวของ Man ที่ไม่ได้กำหนดยังไม่สามารถรับได้ผ่านตัวดำเนินการ dot
console.log(m.getSchool()); // pku รับโรงเรียนแอตทริบิวต์ส่วนตัวผ่านเมธอด getSchool()