代码如下:
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中的那一行声明将解决问题。
为什么?
答案 0 :(得分:3)
这是因为您在 当编译为Javascript时,代码变为 在实例化 在{{1}}调用后,属性初始化将移至构造函数。 在Typescript中没有覆盖属性(通过继承)。this.propertyA
中ChildClassA
分配后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));
中查看
ChildClassA
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