Typescript继承属性

时间:2016-07-29 08:34:10

标签: inheritance typescript

代码如下:

class BaseClass {
   propertyA: KnockoutObservable<string> = ko.observable<string>();
   constructor(message: string) {
      this.propertyA.subscribe((newValue)=>{
          console.log(newValue); // not run when change propertyA in ChildClassA instance.
      });
   }      
}
class ChildClassA extends BaseClass   {
   propertyA: KnockoutObservable<string> = ko.observable<string>(); //remove it, the issue is solved.
}

我注意到当ChildClassA具有与BaseClass相同的属性时,propertyA的订阅功能将不会运行。删除ChildClassA中的那一行声明将解决问题。

为什么?

1 个答案:

答案 0 :(得分:3)

这是因为您在this.propertyAChildClassA 分配后BaseClass 重新分配var BaseClass = (function () { function BaseClass(message) { this.propertyA = ko.observable(); this.propertyA.subscribe(function (newValue) { console.log(newValue); // not run when change propertyA in ChildClassA instance. }); } return BaseClass; }()); var ChildClassA = (function (_super) { __extends(ChildClassA, _super); function ChildClassA() { _super.apply(this, arguments); this.propertyA = ko.observable(); //remove it, the issue is solved. } return ChildClassA; }(BaseClass));

当编译为Javascript时,代码变为

ChildClassA

playground

中查看

在实例化super时,您正在调用BaseClass,该this.propertyA调用super的构造函数,该构造函数指定this.propertyA并订阅该侦听器。精细。但是,在致电ChildClassA之后,您正在this.propertyA = ko.observable(); //remove it, the issue is solved. 构造函数中重新分配super

library(Rcpp)

cppFunction('NumericVector sortIt(NumericVector v){
    int len = v.size();
    std::sort(&v[0], &v[len], std::greater<int>());
    return v;
            }')

 sortIt(sample(1:20))
 [1] 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

在{{1}}调用后,属性初始化将移至构造函数。

在Typescript中没有覆盖属性(通过继承)。