javascript类的问题

javascript问题

目的:学写一个javascript类,来实现[color=red]星级投票[/color]系统的使用。
问题:[color=red]当用该类new一个没有问题,如果连续new两个以上的对象,只有最后一个对象起作用[/color]。
问题范围:本人对javascript类不是很明晰,可能是[color=blue]类写得有问题,或者类里面的方法问题[/color],再多次new对象时候,是不是方法会共用了?

类代码:
function AgStar(pid,newid,tag){
var starno = 5;
var selectno = 2;
var nid = newid;
var ag = new Array('差','一般','还行','不错','力荐');
//this.pid = pid;
init = function(){

var div = document.createElement('div');
var str = '';
str += "

" + tag + ""
for(var i = 0; i < starno; i++){
str += "★";
}
str += "
";
div.innerHTML = str;
$(pid).appendChild(div);
setStar(selectno);
}
setStar = function(n){
for(var i = n+1; i < starno; i++){
$(nid+i).style.color = "#ccf";
}
for(i = 0; i <= n; i++){
$(nid+i).style.color = "#669";
}
}
out = function(){
this.setStar(selectno);
}
selectStar = function(n){
selectno = n;
this.setStar(n);
}
this.getScore = function(){
return selectno+1;
}
init();
}

调用代码:
var ag = new AgStar('showDiv','service','服务');
var ag2 = new AgStar('showDiv','efficency','效率');

结果:服务的不能动,没有反应;而效率的可以正常使用。
[b]问题补充:[/b]
javascript问题

目的:学写一个javascript类,来实现[color=red]星级投票[/color]系统的使用。
问题:[color=red]当用该类new一个没有问题,如果连续new两个以上的对象,只有最后一个对象起作用[/color]。
问题范围:本人对javascript类不是很明晰,可能是[color=blue]类写得有问题,或者类里面的方法问题[/color],再多次new对象时候,是不是方法会共用了?

类代码:
function AgStar(pid,newid,tag){//pid是显示地方,newid是这个功能的id,tag是显示标签
var starno = 5;
var selectno = 2;
var nid = newid;
var ag = new Array('差','一般','还行','不错','力荐');
//this.pid = pid;
init = function(){

var div = document.createElement('div');
var str = '';
str += "

" + tag + ""
for(var i = 0; i < starno; i++){
str += "★";
}
str += "
";
div.innerHTML = str;
$(pid).appendChild(div);
setStar(selectno);
}
setStar = function(n){
for(var i = n+1; i < starno; i++){
$(nid+i).style.color = "#ccf";
}
for(i = 0; i <= n; i++){
$(nid+i).style.color = "#669";
}
}
out = function(){
this.setStar(selectno);
}
selectStar = function(n){
selectno = n;
this.setStar(n);
}
this.getScore = function(){
return selectno+1;
}
init();
}

调用代码:
var ag = new AgStar('showDiv','service','服务');
var ag2 = new AgStar('showDiv','efficency','效率');

结果:服务的不能动,没有反应;而效率的可以正常使用。
[b]问题补充:[/b]
全部改成了this,变量为公共的,方法也为公共的,但是还是不能使用。

建议楼主写成class模样(跟你学的)。
比如:
[code="java"]function firstP(){
this.name = "";
this.id = "";
this.setp = function (name,id){
this.name=name;
this.id=id;
}
this.show=function(){
alert(this.name);
}
}
var t1 = new firstP();
t1.setp("zr","a");
var t2 = new firstP();
t2.setp("zrrrrr","aaaaa");
t1.show();
t2.show();[/code]

[code="java"]
function AgStar(pid,newid,tag){
this.starno = 5;
this.selectno = 2;
this.nid = newid;
this.ag = new Array('差','一般','还行','不错','力荐');
//this.pid = pid;
this.init = function(){
var div = document.createElement('div');
var str = '';
str += "

" + tag + "";
var that = this;
for(var i = 0; i < this.starno; i++){

str += "★";
}
str += "

";
div.innerHTML = str;
$(pid).appendChild(div);
this.setStar(this.selectno);
};

this.setStar = function(n){
for(var i = n+1; i < this.starno; i++){
$(this.nid+i).style.color = "#ccf";
}
for(i = 0; i <= n; i++){
$(this.nid+i).style.color = "#669";
}
};

this.out = function(){
this.setStar(this.selectno);
};

this.selectStar = function(n){
this.selectno = n;
this.setStar(n);
};

this.getScore = function(){
return this.selectno+1;
};

this.init();
}

[/code]

javascript对象最重要的是this指针的运用,不然没有办法实现复用。你的AgStar中的所有私有(所有能有得到)的属性都需要加this指针。

[b]纠正一点:javascript 没有类,只有原型。[/b]

把你修改后的代码粘出来,
相应的页面也粘出来,我帮你调试下看

JavaScript中是基于prototype来进行对象创建的。prototype中的对象是会被所有从这个prototype中创建的对象所共用的。

可以参考一下这篇文章:[url]http://www.ibm.com/developerworks/cn/web/wa-lo-dojoajax1/#prototype[/url]