最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

oop - Defining Javascript class prototype methods - Stack Overflow

programmeradmin5浏览0评论

I defined a class like this at first:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;

    //methods
    this.prototype.visible = function(){return true;};
    this.prototype.getID = function(){return y*tiles_per_line+x;};
    this.prototype.getSrc = function(){return 'w-'+this.getID+'.png';}
};

Which throws an exception when I try to create an object:

t=new mapTile(1,1)
TypeError: Cannot set property 'visible' of undefined

in Chromium and fails silently in Firefox(with firebug)

This works OK though:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;
};

//methods
//this.prototype.xx=1;
mapTile.prototype.visible = function(){return true;};

What is the proper way to implement prototype methods inside the body?

I defined a class like this at first:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;

    //methods
    this.prototype.visible = function(){return true;};
    this.prototype.getID = function(){return y*tiles_per_line+x;};
    this.prototype.getSrc = function(){return 'w-'+this.getID+'.png';}
};

Which throws an exception when I try to create an object:

t=new mapTile(1,1)
TypeError: Cannot set property 'visible' of undefined

in Chromium and fails silently in Firefox(with firebug)

This works OK though:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;
};

//methods
//this.prototype.xx=1;
mapTile.prototype.visible = function(){return true;};

What is the proper way to implement prototype methods inside the body?

Share Improve this question asked Jan 3, 2011 at 12:22 Atilla FilizAtilla Filiz 2,4328 gold badges31 silver badges49 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 9

What is the proper way to implement prototype methods inside the body?

You may not like this answer: don't define them inside the body, since that would re-define them every time the constructor runs for that object. Define them like you have working, with objectType.prototype... after it's declared.

Prototype methods are there specifically to be shared amongst all instances, what you're doing is somewhere in-between, you either want them declared inside specific to that instance, like this:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;

    //methods
    this.visible = function(){return true;};
    this.getID = function(){return y*tiles_per_line+x;};
    this.getSrc = function(){return 'w-'+this.getID+'.png';}
}

Or shared on the prototype outside, like this:

function mapTile(nx,ny)
{
    //members
    this.x = nx;
    this.y = ny;
}
mapTile.prototype.visible = function(){return true;};
mapTile.prototype.getID = function(){return y*tiles_per_line+x;};
mapTile.prototype.getSrc = function(){return 'w-'+this.getID+'.png';}
发布评论

评论列表(0)

  1. 暂无评论