日期:2014-05-16  浏览次数:20391 次

Javascript 面向对象的方法声明问题?
一个类
function   people(n,a)
{
    this.name=n;
    this.age=a;
    this.car=new   Object();     //《---ps:这里声明,是不是和闭包问题有关系?
}
people.prototype.getName=function(){return   this.name;}

=====================以上都好理解,现在我要声明对象car的属性和方法,car是people买的一辆汽车,有几个属性

function   people(n,a)
{
    this.name=n;
    this.age=a;
}
people.prototype.getName=function(){return   this.name;}
people.car=new   Object();//       <--ps:把它声明在类外边,是不是合理?
people.car.color= 'red ';//   car的属性
people.car.brand= 'BMW ';

people.car.prototype.getColor=function(){return   people.car.color;}//ps:与下边的方法不同之处?
people.car.getBrand=function(){return   people.car.brand;}

==========上边的属性与方法声明的结构是否正确?
                    我new   一个people后,people.prototype.getName方法是每个对象共享的,那么car对象呢?是每个people共享还是一个单例,感觉是个单例,因为直接挂在类上了。如果需要每个people都有自己的car对象该怎么声明,最后car对象的两个方法如果都能正常运行的话,是不是就是类方法与对象方法的差别?


有没有造诣深厚的Js高人指点下?



------解决方案--------------------
<script>
function people(n,a)
{
this.name=n;
this.age=a;
this.car=new Object();// <--ps:把它声明在类外边,是不是合理?
this.car.color;
this.car.brand;
this.car.getColor=function(){return this.color;}
this.car.getBrand=function(){return this.brand;}
}
people.prototype.getName=function(){return this.name;}

var Mike = new people( "Mike ", 28);
Mike.car.color = "blue ";
Mike.car.brand = "BMW ";
alert(Mike.getName() + " has a " + Mike.car.getColor() + " " + Mike.car.getBrand());

var Jack = new people( "Jack ", 24);
Jack.car.color = "black ";
Jack.car.brand = "BENZ ";
alert(Jack.getName() + " has a " + Jack.car.getColor() + " " + Jack.car.getBrand());
</script>
------解决方案--------------------
<script type= "text/javascript ">
<!--
function People(){
this.name = " ";
this.car = null;
}
People.prototype.getName = function(){
return this.name;
}
People.prototype.setName = function(name){
this.name = name;
}
People.prototype.buyCar = function(car){
this.car = car;
}
People.prototype.getCar = function(){
return this.car;
}
People.prototype.showCar = function(){
document.write(this.getName(), "的车的颜色是: ",this.getCar().getColor(), " <br> ");
}


function Car(clr){
this.color = clr;
}
Car.prototype.getColor = function(){
return this.color;
}

var p1 = new People();
p1.setName( "刘翔 ");
var p2 = new People();
p2.setName( "姚明 ");

var car1 = new Car( "红色 ");
var car2 = new Car( "黑色 ");

p1.buyCar(car1);
p2.buyCar(car2);

p1.showCar();
p2.showCar();


//-->
</script>
------解决方案--------------------
<script language= "javascript ">
<!--
function people(n,a){
this.name=n;
this.age=a;
this.car=new Object(); //《---ps:这里声明,是不是和闭包问题有关系?
//不是闭包
}
peopl