属性 'foo' 受到保护,只能通过 class 'Foo' 的实例访问(在 Foo 的实例中)
Property 'foo' is protected and only accesible through an instance of class 'Foo' (in instances of Foo)
我的 Typescript 中有以下代码。但它在 child._moveDeltaX(delta)
行报告以下错误:
ERROR: Property '_moveDeltaX' is protected and only accesible
through an instance of class 'Container'
INFO: (method) Drawable._moveDeltaX( delta:number):void
代码如下:
class Drawable {
private _x:number = 0;
constructor() {}
/**
* Moves the instance a delta X number of pixels
*/
protected _moveDeltaX( delta:number):void {
this._x += delta;
}
}
class Container extends Drawable {
// List of childrens of the Container object
private childs:Array<Drawable> = [];
constructor(){ super();}
protected _moveDeltaX( delta:number ):void {
super._moveDeltaX(delta);
this.childs.forEach( child => {
// ERROR: Property '_moveDeltaX' is protected and only accesible
// through an instance of class 'Container'
// INFO: (method) Drawable._moveDeltaX( delta:number):void
child._moveDeltaX(delta);
});
}
}
我有什么问题吗?我认为您可以访问受保护的方法。在其他语言中,这段代码可以毫无问题地工作。
您 "childs" 对象不在继承对象的可见范围内。您刚刚创建了一个无法访问受保护方法的新实例。您可以使用 super 访问受保护的方法,但不能访问其他实例。
这在 c# 中也会失败(我认为)。
我的 Typescript 中有以下代码。但它在 child._moveDeltaX(delta)
行报告以下错误:
ERROR: Property '_moveDeltaX' is protected and only accesible
through an instance of class 'Container'
INFO: (method) Drawable._moveDeltaX( delta:number):void
代码如下:
class Drawable {
private _x:number = 0;
constructor() {}
/**
* Moves the instance a delta X number of pixels
*/
protected _moveDeltaX( delta:number):void {
this._x += delta;
}
}
class Container extends Drawable {
// List of childrens of the Container object
private childs:Array<Drawable> = [];
constructor(){ super();}
protected _moveDeltaX( delta:number ):void {
super._moveDeltaX(delta);
this.childs.forEach( child => {
// ERROR: Property '_moveDeltaX' is protected and only accesible
// through an instance of class 'Container'
// INFO: (method) Drawable._moveDeltaX( delta:number):void
child._moveDeltaX(delta);
});
}
}
我有什么问题吗?我认为您可以访问受保护的方法。在其他语言中,这段代码可以毫无问题地工作。
您 "childs" 对象不在继承对象的可见范围内。您刚刚创建了一个无法访问受保护方法的新实例。您可以使用 super 访问受保护的方法,但不能访问其他实例。
这在 c# 中也会失败(我认为)。