के लिए जावास्क्रिप्ट कोड उत्पन्न करता है मेरे पास एक प्रश्न है कि टाइपस्क्रिप्ट सरल वर्ग विरासत के लिए जावास्क्रिप्ट कोड कैसे उत्पन्न करता है। नीचे कुछ जावास्क्रिप्ट कोड के बाद कुछ टाइपस्क्रिप्ट कोड है।टाइपस्क्रिप्ट सरल वर्ग विरासत
टाइपप्रति कोड:
class Animal {
constructor(public name: string) { }
move(meters: number) {
alert(this.name + " moved " + meters + "m.");
}
}
class Cat extends Animal {
constructor(name: string) { super(name); }
move() {
alert("run...");
super.move(5);
}
}
जनरेट किया Javascript कोड:
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var Animal = (function() {
function Animal(name) {
this.name = name;
}
Animal.prototype.move = function (meters) {
alert(this.name + " moved " + meters + "m.");
};
return Animal;
})();
var Cat = (function (_super) {
__extends(Cat, _super);
function Cat(name) {
_super.call(this, name);
}
Cat.prototype.move = function() {
alert("run...");
_super.prototype.move.call(this, 5);
};
return Cat;
})(Animal);
आपको लगता है कि जावास्क्रिप्ट कोड उत्पन्न एक __extends(d, b)
शामिल देखेंगे। यह फ़ंक्शन सभी बेस क्लास गुणों को व्युत्पन्न कक्षा में प्रतिलिपि बनाता है: d[p] = b[p];
।
मेरा प्रश्न यह है कि यह प्रतिलिपि क्यों आवश्यक है, बस Cat.prototype = _super;
सेट करना ठीक था और जावास्क्रिप्ट प्रोटोटाइप आधारित विरासत के साथ इनलाइन था। आधार ctor गुणों को d[p] = b[p];
जैसे व्युत्पन्न सीटीआर की प्रतिलिपि बनाना स्मृति की बर्बादी लगता है।
इस जावास्क्रिप्ट ** [प्रश्न] (http://stackoverflow.com/a/1535687/3487297) ** स्थिर गुणों के बारे में, जो @WiredPrairie की प्रतिक्रिया के साथ मिलकर है। – g4rce