用里面的Image对象创建对象的副本

时间:2017-08-30 18:05:39

标签: javascript image

我目前正致力于基于javascript的游戏引擎,并且在克隆游戏对象时遇到了问题。我的gameObject类包含一个Sprite字段,我的Sprite类包含一个Image类字段。我设置了一个复制功能,除了Image字段外,所有内容都被正确复制。以下是使用的三个函数:

function Sprite(x, y, width, height, src, tag)
{
    this.X = x;
    this.Y = y;
    this.image = new Image();
    this.image.width = width;
    this.image.height = height;
    this.image.src = src;
    this.tag = tag;
}

//GameObject Class
function GameObject(sprite, hidden, tag)
{
    this.sprite = sprite;
    this.hidden = hidden;
    if (tag == null) {
        this.tag == "default";
    }
}

function cloneObject(gameObject)
{
    var clone = Object.create(Object.getPrototypeOf(gameObject));

    var i, descriptor, keys = Object.getOwnPropertyNames(gameObject);

    for (i = 0; i < keys.length; i++) {
        descriptor = Object.getOwnPropertyDescriptor(gameObject, keys[i]);
        if (descriptor.value && typeof descriptor.value === 'object') {
            descriptor.value = cloneObject(descriptor.value);
        }

        Object.defineProperty(clone, keys[i], descriptor);
    }

    return clone;
}

在原始gameObject中,向上层次结构显示图像字段包含值(或类型)img。

image:img

这将打开所有正确的图像属性(例如身高:30)。

在copy gameObject中,图像字段包含值(或类型)HTMLImageElement {}。

image:HTMLImageElement {}

这会打开图像属性,其中没有一个是正确的(例如height:Exception:TypeError:Illegal Invocation ...)。

我做错了什么?

0 个答案:

没有答案