zoukankan      html  css  js  c++  java
  • javascript方法重载惹的祸

    先贴出代码,看看执行结果会是什么?

    function ShowMsg() {
    //函数1   
    this.sure = function () { alert("ok"); };
    //函数2
    this.sure = function (msg) { alert(msg); }; } var showMsg = new ShowMsg(); showMsg.sure();

     看上面的代码,本以为是两个方法重载的函数,执行后会弹出"ok"的信息。实则却弹出一个空字符的框。

    原来定义javascript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是行不通的。

    上面代码执行时,javascript通过函数名找到对应的函数对象,然后根据函数按照定义时的参数和表达式参数列表按顺序匹配,多余的参

    数舍去,不够的参数按undefined处理,然后执行函数代码。

    javascript重载函数需要通过函数代码判断参数值和类型实现,arguments是javascript里的一个内置对象,包含了调用时传递的实际参

    数;上面的代码可以改为:

    function ShowMsg() {
      this.sure = function () {
        if(arguments.length==0){
            alert("ok");
           }
        if(arguments.length==1){
             if(arguments[0].constructor ==String){
              alert(arguments[0]);
              }
          }
        };
    }
            
    var showMsg = new ShowMsg();
    showMsg.sure();

     执行后会弹出"ok"。

    
    
  • 相关阅读:
    webkit webApp 开发技术要点总结
    EJB 教程推荐
    MySQL 教程分享
    php 教程列表
    html 学习资料列表
    JAVA 教程推荐
    php+mysql预查询prepare 与普通查询的性能对比
    Spring 5 新特性:函数式Web框架
    Java多线程之并发协作生产者消费者设计模式
    php使用file函数、fseek函数读取大文件效率分析
  • 原文地址:https://www.cnblogs.com/paulhe/p/4226080.html
Copyright © 2011-2022 走看看