วิธีนี้ไม่ได้เป็นต้นฉบับโดยผู้เขียน ฉันเพิ่งสรุปมันขึ้นอยู่กับรุ่นก่อนและมาด้วยวิธีการสืบทอด JavaScript ที่กระชับและใช้งานได้จริง
จาวาสคริปต์แบบดั้งเดิมสืบทอดโซ่ต้นแบบขึ้นอยู่กับต้นแบบและต้องใช้การดำเนินการใหม่จำนวนมาก รหัสไม่กระชับเพียงพอความสามารถในการอ่านไม่แข็งแรงมากและดูเหมือนว่าจะปนเปื้อนได้ง่ายโดยห่วงโซ่ต้นแบบ
วิธีการสืบทอดที่สรุปโดยผู้เขียนนั้นกระชับและชัดเจน แม้ว่ามันจะไม่ใช่วิธีที่ดีที่สุด แต่ฉันหวังว่ามันจะเป็นแรงบันดาลใจให้ผู้อ่าน
โอเคอย่าพูดเรื่องไร้สาระมากแค่ดูรหัสความคิดเห็นมีรายละเอียดคุณสามารถเข้าใจได้อย่างรวดเร็วก่อน ~~~
การคัดลอกรหัสมีดังนี้:
-
* สร้างโดย Yang Yuanon 14-11-11
* อย่าใช้ต้นแบบเพื่อใช้การสืบทอด
-
-
-
* การคัดลอกวัตถุ JavaScript, คัดลอกเพียงหนึ่งชั้นและเฉพาะแอตทริบิวต์ฟังก์ชั่นการคัดลอกไม่ใช่สากล!
* @param obj object เพื่อคัดลอก
* @returns Object
-
Object.prototype.clone = function () {
var _s = สิ่งนี้
newObj = {};
_s.each (ฟังก์ชั่น (คีย์, ค่า) {
if (object.prototype.toString.call (value) === "[ฟังก์ชันวัตถุ]") {
newobj [key] = ค่า;
-
-
คืน Newobj;
-
-
* วนซ้ำผ่านคุณสมบัติทั้งหมดของตัวเอง
-
* @param ฟังก์ชั่นการโทรกลับ การโทรกลับจะมีพารามิเตอร์สองตัว: ชื่อแอตทริบิวต์คีย์และค่าแอตทริบิวต์ค่า
-
Object.prototype.each = function (callback) {
var key = ""
_ นี่ = สิ่งนี้;
สำหรับ (คีย์ใน _this) {
if (object.prototype.hasownproperty.call (_this, key)) {
การโทรกลับ (คีย์, _ นี่ [คีย์]);
-
-
-
-
* สร้างคลาสย่อย
* @param ext obj มีวิธีการที่ต้องเขียนใหม่หรือขยาย
* @returns Object
-
Object.prototype.extend = function (ext) {
var child = this.clone ();
ext.each (ฟังก์ชั่น (คีย์, ค่า) {
เด็ก [คีย์] = ค่า;
-
เด็กกลับ;
-
-
* สร้างวัตถุ (อินสแตนซ์)
* อาร์กิวเมนต์ @param สามารถยอมรับพารามิเตอร์จำนวนใดก็ได้เป็นรายการพารามิเตอร์ตัวสร้าง
* @returns Object
-
Object.prototype.create = function () {
var obj = this.clone ();
ถ้า (obj.construct) {
obj.construct.apply (obj, อาร์กิวเมนต์);
-
คืน OBJ;
-
-
* ตัวอย่างการใช้งาน
* ใช้วิธีนี้เพื่อสืบทอดหลีกเลี่ยงต้นแบบที่น่าเบื่อและใหม่
* อย่างไรก็ตามตัวอย่างที่ฉันเขียนสามารถสืบทอดฟังก์ชั่นของคลาสแม่ (สามารถเข้าใจได้ว่าเป็นวิธีการสมาชิก)
* หากคุณต้องการสืบทอดเนื้อหาที่หลากหลายมากขึ้นโปรดปรับปรุงวิธีการโคลน
-
-
-
-
* สัตว์ (พ่อแม่)
* @type {{construct: construct, Eat: Eat}}
-
var iment = {
สร้าง: ฟังก์ชั่น (ชื่อ) {
this.name = ชื่อ;
-
Eat: function () {
console.log ("ชื่อของฉันคือ"+this.name+"ฉันกินได้!");
-
-
-
* นก (subclass)
* นกแทนที่วิธีการกินคลาสแม่และขยายวิธีการบิน
* @type {subclass | void}
-
var bird = iment.extend ({
กิน: ฟังก์ชั่น (อาหาร) {
console.log ("ชื่อของฉันคือ"+this.name+"ฉันกินได้"+อาหาร+"!");
-
บิน: ฟังก์ชั่น () {
console.log ("ฉันบินได้!");
-
-
-
* สร้างอินสแตนซ์ของนก
* @type {jim}
-
var birdjim = bird.create ("Jim")
BirdTom = Bird.create ("Tom");
birdjim.eat ("หนอน"); // ฉันชื่อจิม ฉันกินหนอนได้!
birdjim.fly (); // ฉันบินได้!
birdtom.eat ("ข้าว"); // ฉันชื่อทอม ฉันกินข้าวได้!
birdtom.fly (); // ฉันบินได้!