属性'foo'受到保护,只能通过类'Foo'的实例访问(在Foo的实例中)

时间:2016-08-08 00:09:53

标签: typescript protected

我的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);
        });
    }
}

我有什么不对?我以为你可以访问受保护的方法。在其他lenguajes中,此代码可以正常工作。

1 个答案:

答案 0 :(得分:1)

您的“childs”对象不在继承对象的可见性中。您刚刚创建了一个无法访问受保护方法的新实例。您可以使用super访问受保护的方法,但不能访问其他实例。

这也会在c#中失败(我认为)。