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;

演示在这里

如果从构造函数返回值,则创建的对象将具有返回值的类型。

演示在这里。如果您看到这个演示,d.areturns4意味着new gameObject返回this.o值而this不是gameObject().

如果你想使用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 回答