自动传递父对象

时间:2015-03-20 04:53:04

标签: javascript oop inheritance

所以我有几个课程

function BaseClass(x, y){
    this.x = x;
    this.y = y;
}

function ImageClass(img, w, h, x, y){
    BaseClass.call(this, x, y);
    this.img = img;
}
ImageClass.prototype = Object.create(BaseClass.protoype);
ImageClass.prototype.constructor = ImageClass;

function LayerClass(img, w, h, x, y){
    ImageClass.call(img, w, h, x, y);
    this.collection = [];
    this.createSprite = function(img, r, a, w, h, x, y){
        this.collection.push(new Sprite(img, r, a, w, h, x, y));
    }
}
LayerClass.prototype = Object.create(ImageClass.prototype);
LayerClass.prototype.constructor = LayerClass;

function SpriteClass(img, r, a, w, h, x, y){
    ImageClass.call(img, w, h, x, y);
    this.r = r;
    this.a = a;
}
SpriteClass.prototype = Object.create(ImageClass.prototype);
SpriteClass.prototype.constructor = SpriteClass;

在我的代码中,每个继承的类都使用call()来传递'this'

问题是如果我有一个包含任何Sprite对象的Layer对象,我希望Sprite对象有一个父(超级)引用,我不能这样做,因为类构造函数使用它来设置属性

所以有人知道我如何传递父母或者(我知道这听起来很愚蠢,已经晚了)能够在类构造函数中获取父作用域吗?

在写这篇文章时,我意识到它可能就像在将对象设置为子项之后设置父属性一样简单,但我正在寻找确认,如果这是最好的方式或者如果有人知道更好的事情。也随意告诉我,我对原型一无所知,因为我还在学习它。 : - )

-Thanks

1 个答案:

答案 0 :(得分:0)

这会有用吗?它不是自动的,但仍然有效。 Javascript没有对类的本机支持,因此它有其局限性。

function LayerClass(img, w, h, x, y){
    ImageClass.call(img, w, h, x, y);
    this.collection = [];
    this.createSprite = function(img, r, a, w, h, x, y){
        var spriteObj = new Sprite(img, r, a, w, h, x, y);
        spriteObj.parent = this;
        this.collection.push(spriteObj);
    }
}

您将能够访问spriteObject的父变量。

另外,如果您正在寻找继承,请尝试使用咖啡脚本。它会编译回javascript并为您处理大部分继承问题。