hbyhs 2011-03-21 10:47
浏览 174
已采纳

javascript 面向对象问题

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <script type="text/javascript">
    var IdCard = function(paperNo){     
        var validId15=function(){
            //alert(paperNo);
            return false;
        }
        var validId18=function(){
            //alert(paperNo);
            return false;
        }
        var valid = function (){                
                if(paperNo.length==15){    
                    return validId15();    
                }else if(paperNo.length==18){    
                    return validId18();    
                }
                return false;
        }

        this.validate = {
            valueOf: valid,
            toString: valid
        }

    }
    function test(){
        idCard = new IdCard("123456789012345678");
        
        alert(idCard.validate);     //此处打印 false
        if(idCard.validate) alert(true);        //此处打印 true
    }
  </script>
 </head>

 <body>
  <input type="button" value="" onclick="test()">
 </body>
</html>

 if中的idCard.validate没有被执行,为什么?该怎么修改?

  • 写回答

4条回答 默认 最新

  • lxbccsu 2011-03-21 13:04
    关注

    [quote]
    alert(idCard.validate); //此处打印 false

    if(idCard.validate) alert(true); //此处打印true

    [/quote]

    修改为

    [code="java"]
    alert(idCard.validate.valueOf()); //此处打印 false

    if(idCard.validate.valueOf()) alert(true); //此处不会打印

    [/code]

    原因:alert(idCard.validate)会依次执行对象字面量中的valueOf和toString 方法,但alert()方面只显示了最后toString的值;
    if(idCard.validate)自然是返回一个不为null的js对象,所以执行alert(true);

    你修改
    [code="java"]
    this.validate = {

    valueOf: valid,

    toString: function(){
    alert("hello");
    }

    }

    [/code]

    这里不变
    [quote]
    alert(idCard.validate); //此处打印 false

    if(idCard.validate) alert(true); //此处打印 true

    [/quote]

    就会发现先弹出hello,而alert(idCard.validate);就返回了undefined,因为toString()无返回值了嘛,而if(idCard.validate)自然不为null,弹出true。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器