向JavaScript函数添加方法

时间:2013-01-22 03:25:35

标签: javascript oop function methods

有许多方法可以在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;
                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);
            };
            this.setClass=function(c){
                this.o.cname=c;
            };
            return this.o;
        }

我想要的是这样的:

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

等。等等。

我仍然是面向对象编程的新手,所以我甚至不知道我的词汇是否正确。我正在尝试做什么以及正确的做法是什么?

2 个答案:

答案 0 :(得分:5)

您不应该从此构造函数返回任何内容。

删除此

返回this.o;

Demo here

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

Demo here。 如果您看到此演示d.a,则返回4表示new gameObject返回this.o值,而不是this gameObject()

如果你想使用原型

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;
    }
}

Demo here

答案 1 :(得分: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;
    }
};

你之前如何做的问题是返回一些东西 - 你不需要这样做。