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

菜鸟求教JS问题
<script type="text/javascript">
function CreateCar(color,doors,speed){
var TemCar = new Object;
this.color = color ;
this.doors = doors ;
this.speed = speed;

TemCar.Showcolor = function(){
alert(this.color);
}

return TemCar;
}
var NewCar = CreateCar("red",4,133);
NewCar.Showcolor();

</script>
为什么执行后 alert 提示框是undefined

------解决方案--------------------
JScript code

<script type="text/javascript">

//可以用两种方法实现上面的例子
//第一种 js对象的prototype属性  对象的新实例会"继承"赋予该对象原型的操作,也就是可以使用js对象prototype属性为对象增加方法


    function CreateCar(color,doors,speed){
        this.color = color;
        this.doors = doors;
        this.speed = speed;
    }

     CreateCar.prototype.ShowColor = function (){   //为对象增加原形方法
         alert(this.color);
    }

    var NewCar = new CreateCar("red",4,133);
    NewCar.ShowColor();
    
</script>





<script type="text/javascript">
    //另一种方法,也可以实现同样的功能,而且更好的理解

    function CreateCar(color,doors,speed){
            
        this.color = color ;
        this.doors = doors ;
        this.speed = speed;

        this.Showcolor = showColor;  //为属性增加一个方法

        function showColor(){
            alert(this.color);
        }
    }

    var NewCar = new CreateCar("red",4,133);
    NewCar.Showcolor();  //调用类中的方法


</script>

------解决方案--------------------
this的用法,应该是执行哪个函数的时候,这个this就是指向哪个函数

那么,
JScript code

function CreateCar(color,doors,speed){
var TemCar = new Object;
this.color = color ;//这里的this是指向CreateCar,和TemCar 毫无关系
this.doors = doors ;//同上
this.speed = speed;//同上

TemCar.Showcolor = function(){
alert(this.color);;//这里的this是指向TemCar.Showcolor,你又没有给这个属性定义值,当然是undefined
}

return TemCar;
}

------解决方案--------------------
function CreateCar(color,doors,speed){
var TemCar = new Object;
this.color = color ;
this.doors = doors ;
this.speed = speed;

TemCar.Showcolor = function(){
alert(this.color);
}

return TemCar;//函数返回值,请注意,该对象一个成员都没有添加
}
var NewCar = CreateCar("red",4,133);//直接调用函数,获得函数返回值,没有添加成员的对象
NewCar.Showcolor();

这儿CreateCar没有被当作构造函数使用,获得的是函数返回值,是一个new Object(),明白了么?
改一下:

var NewCar =new CreateCar("red",4,133);//用函数构造成员,函数内添加有几个属性
NewCar.Showcolor();//有了