1

JavaScriptで関数を呼び出す方法はたくさんありますが、これは私にはうまくいきません。誰かが私が間違っていることを正確に教えてもらえますか?

プロトタイピング(例)を試しgameObject.prototype = {};ましたが、何らかの理由でうまくいきませんでした。今、私は関数内で直接メソッドを割り当てようとしていますが、それも機能していません。

この写真の何が問題になっていますか?

function gameObject() {
    this.o = {};

    this.setimage = function(i) {
        this.o.img = i;
    };

    this.setDimensions = function(w, h) {
        this.o.width = w;
        this.o.height = h;
    };

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

    this.create = function() {
        var el = document.createElement("div");
        el.className = "object " + this.o.cname;
        el.style.width = width * this.o.w;
        el.style.height = height * this.o.h;
        el.style.position = "absolute";
        el.style.top = height * this.o.y;
        el.style.left = width * this.o.x;
        map.appendChild(el);
    };

    this.setClass = function(c) {
        this.o.cname = c;
    };

    return this.o;
}

私が欲しいのはこのようなものです:

var d = new gameObject();
d.setClass("class");
d.setDimensions(0.8, 0.15);

私はまだオブジェクト指向プログラミングにかなり慣れていないので、語彙が正しいかどうかさえわかりません。私がやろうとしていることは何ですか、そしてそれを正確に行うための適切な方法は何ですか?

4

2 に答える 2

5

このコンストラクターから何も返さないでください。

これを削除します:

return this.o;

ここでデモ

コンストラクターから値を返す場合、作成されたオブジェクトは返された値の型になります。

ここでデモ。このデモを見ると、 returnは、どちらがではなく、値d.aが返された4ことを意味します。new gameObjectthis.othisgameObject()

使用したい場合prototype

function gameObject() {
    this.o = {};
}

gameObject.prototype = {
    setimage:function(i) {
        this.o.img = i;
    },
    setDimensions:function(w, h) {
        this.o.width = w;
        this.o.height = h;
    },
    setPosition:function(x, y) {
        this.o.x = x;
        this.o.y = y;
    },
    create:function() {
        var el = document.createElement("div");
        el.className = "object " + this.o.cname;
        el.style.width = width * this.o.w;
        el.style.height = height * this.o.h;
        el.style.position = "absolute";
        el.style.top = height * this.o.y;
        el.style.left = width * this.o.x;
        map.appendChild(el);
    },
    setClass:function(c) {
        this.o.cname = c;
    }
}

ここでデモ

于 2013-01-22T03:28:14.960 に答える
1

JavaScript でインスタンス メソッドを作成する最善の方法は、プロトタイプを使用することです。このコードは動作するはずです:

function gameObject(){
    this.o={};
};
gameObject.prototype = {
    setimage: function(i){
        this.o.img=i;
    },
    setDimensions: function(w,h){
        this.o.width=w;
        this.o.height=h;
    },
    setPosition: function(x,y){
        this.o.x=x;
        this.o.y=y;
    },
    create: function(){
        var el=document.createElement("div");
        el.className="object "+this.o.cname;
        el.style.width=width*this.o.w;
        e.style.height=height*this.o.h;
        el.style.position="absolute";
        el.style.top=height*this.o.y;
        el.style.left=width*this.o.x;
        map.appendChild(el);
    },
    setClass: function(c){
        this.o.cname=c;
    }
};

以前のやり方の問題は、何かを返すことでした-そうする必要はありません。

于 2013-01-22T03:31:01.750 に答える