typescript继承 __extends = (this && this.__extends) || (function () { 代码解读

Posted montai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript继承 __extends = (this && this.__extends) || (function () { 代码解读相关的知识,希望对你有一定的参考价值。

    // function (d, b) 参数d子函数,b父函数. 
   // (this && this.__extends)防止this.extends取到空类型, 如果this类型为空, 不执行this.__extends.
1
  var __extends = (this && this.__extends) || (function () { 2 var extendStatics = function (d, b) { 3 extendStatics = Object.setPrototypeOf ||
         // 设置__proto__
4 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
         //拷贝静态属性
5 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 6 return extendStatics(d, b); 7 }; 8 return function (d, b) {
      // 拷贝静态属性
9 extendStatics(d, b);
      //拷贝静态函数
10 function __() { this.constructor = d; }
      //设置原型
11 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 12 }; 13 })();

 

TS源文件:

 1 class Shape {
 2  
 3     area: number;
 4     color: string;
 5     text: string;
 6  
 7     constructor (public name: string, width: number, height: number ) {
 8         this.area = width * height;
 9         this.color = "pink";
10         this.text = ‘I am a 2D object:‘;
11     };
12  
13     shoutout() {
14         return this.text + this.color + " " + this.name +  " with an area of " + this.area + " cm squared.";
15     }
16 }
17 
18 class Shape3D extends Shape {
19  
20     volume: number;
21     
22  
23     constructor ( public name: string, width: number, height: number, length: number ) {
24         super( name, width, height );
25         this.volume = length * this.area;
26         this.text = ‘I am a 3D object:‘;
27     };
28  
29     shoutout() {
30         return this.text + this.name +  " with a volume of " + this.volume + " cm cube.";
31     }
32  
33     superShout() {
34         return super.shoutout();
35     }
36 }
37 
38 class Shape4D extends Shape3D {
39     
40     d4volume: number;
41     constructor ( public name: string, width: number, height: number, length: number, d4: number ){
42         super(name, width, height, length);
43         this.d4volume = d4 * this.volume;
44         this.text = ‘I am a 4D object‘;
45     };
46     
47     shoutout() {
48         return this.text + this.name +  " with a d4volume of " + this.d4volume + " cm d4cube.";
49     }
50     
51     superShout(){
52         return super.shoutout();
53     }
54 }
55 
56 var cube = new Shape3D("cube", 30, 30, 30);
57 console.log( cube.shoutout() );
58 console.log( cube.superShout());
59 
60 var d4cube = new Shape4D("d4cube", 30, 30, 30, 30);
61 console.log( d4cube.shoutout() );
62 console.log( d4cube.superShout() );

 

js编译后的文件:

 1 var __extends = (this && this.__extends) || (function () {
 2     var extendStatics = function (d, b) {
 3         extendStatics = Object.setPrototypeOf ||
 4             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 5             function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
 6         return extendStatics(d, b);
 7     };
 8     return function (d, b) {
 9         extendStatics(d, b);
10         function __() { this.constructor = d; }
11         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12     };
13 })();
14 var Shape = /** @class */ (function () {
15     function Shape(name, width, height) {
16         this.name = name;
17         this.area = width * height;
18         this.color = "pink";
19         this.text = ‘I am a 2D object:‘;
20     }
21     ;
22     Shape.prototype.shoutout = function () {
23         return this.text + this.color + " " + this.name + " with an area of " + this.area + " cm squared.";
24     };
25     return Shape;
26 }());
27 var Shape3D = /** @class */ (function (_super) {
28     __extends(Shape3D, _super);
29     function Shape3D(name, width, height, length) {
30         var _this = _super.call(this, name, width, height) || this;
31         _this.name = name;
32         _this.volume = length * _this.area;
33         _this.text = ‘I am a 3D object:‘;
34         return _this;
35     }
36     ;
37     Shape3D.prototype.shoutout = function () {
38         return this.text + this.name + " with a volume of " + this.volume + " cm cube.";
39     };
40     Shape3D.prototype.superShout = function () {
41         return _super.prototype.shoutout.call(this);
42     };
43     return Shape3D;
44 }(Shape));
45 var Shape4D = /** @class */ (function (_super) {
46     __extends(Shape4D, _super);
47     function Shape4D(name, width, height, length, d4) {
48         var _this = _super.call(this, name, width, height, length) || this;
49         _this.name = name;
50         _this.d4volume = d4 * _this.volume;
51         _this.text = ‘I am a 4D object‘;
52         return _this;
53     }
54     ;
55     Shape4D.prototype.shoutout = function () {
56         return this.text + this.name + " with a d4volume of " + this.d4volume + " cm d4cube.";
57     };
58     Shape4D.prototype.superShout = function () {
59         return _super.prototype.shoutout.call(this);
60     };
61     return Shape4D;
62 }(Shape3D));
63 var cube = new Shape3D("cube", 30, 30, 30);
64 console.log(cube.shoutout());
65 console.log(cube.superShout());
66 var d4cube = new Shape4D("d4cube", 30, 30, 30, 30);
67 console.log(d4cube.shoutout());
68 console.log(d4cube.superShout());

 

以上是关于typescript继承 __extends = (this && this.__extends) || (function () { 代码解读的主要内容,如果未能解决你的问题,请参考以下文章

面向对象_05类的继承:extends重写父类

Java_继承

smarty中的母板极制_extends和block标签

Django4.3_templates模板之继承标签extends和include添加标签

在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢?

No2_2.接口继承多态_Java学习笔记_继承