1

画像用のこのコードがあります

var img = {
    id: id++,
    link: m.attr("index"),
    x: m.offsetx(),
    y: m.offsety(),
    width: m.width(),
    height: m.height()
};

今私は関数img.setCordinates(x,y)とを呼び出したいと思っていますが、多くのオブジェクトがあり、ファイルに保存されロードされるimg.setDimention(w,h)ため、オブジェクトに追加したくありません。関数が何をするかは問題ではありませんが、それらがどのように実装されているのか疑問に思っていますか?imgimg

これについても言及する必要があります。これらの機能を実行する必要があるのは、このコード例の問題のためです: (良くない)

arr.getById(index).x = 100;
arr.getById(index).y = 200;

.getById()true arr をループし、指定された ID を探す配列の直接のプロトタイプです。

4

3 に答える 3

7

これには、新しいプロトタイプ チェーンを開始する必要があります。

function MyImage(data)
{
    // copy data into this instance
    for (var key in data) {
        this[key] = data[key]; // assume that data is anonymous object
    }
}

MyImage.prototype.setCoordinates = function(x, y) {
    this.x = x;
    this.y = y;
}

MyImage.prototype.setDimensions = function(width, height) {
    this.width = width;
    this.height = height;
}
// etc.

次に、次のような新しいイメージを作成できます。

var img = new MyImage({
    id: id++,
    link: m.attr("index"),
    x: m.offsetx(),
    y: m.offsety(),
    width: m.width(),
    height: m.height()
});

img.setCoordinates(0, 0);

アップデート

JSON.stringify( arr of MyImage ) を使用すると、再度ロードすると機能しないようです。

これは、JSONがメソッドや関数ではなくdataをシリアル化するためです。オブジェクトの配列を復元する場合は、次のMyImageようにする必要があります。

var images = JSON.parse(data).map(function(image) {
    return new MyImage(image);
});

無名関数は解析されたデータをMyImageオブジェクトにマップし、これが復活した配列の各要素に適用されます。

于 2013-05-14T13:41:49.953 に答える
0

あなたが何をしたいのか理解できればimg、オブジェクトがインスタンス化/作成されたときにのみ、各オブジェクトに要求した機能が追加されます。

img.prototype.setCoordinates = function(x, y) {
    this.x = x;
    this.y = y;
}

img.prototype.setDimension = function(w, h) {
    this.width = w;
    this.height = h;
}

これは、メモリ領域を節約する方法です。これはうまくいくかもしれません。

于 2013-05-14T13:37:33.767 に答える
0

私が物事を理解しているように、実装する方法はなくimg.setCoordinates(x,y)img.setDimension(w,h)あなたが定義したとおりです。「img」はオブジェクトです。「画像」を追加。なんでもそれを img オブジェクトに追加します。「img」オブジェクトに内部メソッドを追加したくない場合は、次のようにしてください。

setCoordinates(img.x, img.y){ do your stuff in here}

setDimension(img.width, img.height){ do more stuff here}
于 2013-05-14T13:43:35.700 に答える