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

javascript构造函数的prototype默认是不是Object.prototype呢?若不是,则构造函数的prototype什么对象呢?
我是想通过下面的代码,找出javascript构造函数的prototype默认是哪个对象,可却发现不是不是Object,也不是Object.prototype,那是哪个对象呢?

<!DOCTYPE   html   PUBLIC   "-//W3C//DTD   HTML   4.01   Transitional//EN "   "http://www.w3.org/TR/html4/loose.dtd ">
<html>
<head>
<meta   http-equiv= "Content-Type "   content= "text/html;   charset=GB18030 ">
<title> Insert   title   here </title>
</head>
<body>
<script   type= "text/javascript ">
function   circle(x,y,r)
{
      this.x   =   x;
      this.y   =   y;
      this.r   =   r;
}

if(circle.prototype   ==   null){
    alert( "NULL ");
}else{
            //结果输出NOT   NULL  
    alert( "NOT   NULL ");
    alert(circle.prototype);
    alert(typeof   circle.prototype);

                if(circle.prototype   ==   Object){
        alert( "SAME   TO   OBJECT ");
    }else{
        //结果输出DIRRERENT
        alert( "DIFFERENT   TO   OBJECT ");
    }
   
   
    if(circle.prototype   ==   Object.prototype){
        alert( "SAME   TO   OBJECT 'S   PROTOTYPE ");
    }else{
        //结果输出DIRRERENT
        alert( "DIFFERENT   TO   OBJECT 'S   PROTOTYPE ");
    }
 
}


</script>
</body>
</html>




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

<script   type= "text/javascript"> 
function circle(x, y, r) { 
    this.x = x;
    this.y = y;
    this.r = r;
}

if (circle.prototype == null){ 
    alert("NULL"); 
} else {
//结果输出NOT NULL
    alert("NOT NULL"); //circle是Function的实例,Function的实例是带prototype的
    if (circle.prototype == Object) {
        alert("SAME TO OBJECT");
    } else {
    //结果输出DIRRERENT 
    //prototype貌似继承了Object.prototype,不过继承不代表===吧?
    //证明继承的方法很简单delete circle.prototype.constructor;后在alert(circle.prototype.constructor)就会指向Object
        alert("DIFFERENT TO OBJECT");
    } 
    
    
    if(circle.prototype == Object.prototype){ 
        alert( "SAME   TO   OBJECT &apos;S   PROTOTYPE "); 
    }else{ 
     //结果输出DIRRERENT 
     //这里不解释了。。。看上面的解释就知道了。。。
        alert( "DIFFERENT   TO   OBJECT &apos;S   PROTOTYPE");
    }
} 


</script>