代码之家  ›  专栏  ›  技术社区  ›  Hristo

javascript函数重载

  •  1
  • Hristo  · 技术社区  · 14 年前

    我可以做以下工作吗?

    function contains(element) {
    
     // if the element is a Vertex object, do this
     if (element instanceof Vertex) {
    
      var vertex = element;
      for ( var index in self.verticies) {
       if (self.verticies[index].id == vertex.id) {
        return true;
       }
      }
      return false;
     }
     // else if the element is an Edge object, do this 
     else if (element instanceof Edge) {
    
      var edge = element;
      for ( var index in self.verticies) {
       if (self.verticies[index].id == edge.id) {
        return true;
       }
      }
      return false;
     } else {
      // shouldn't come here
      return false;
     }
    };
    

    基本上…我想打电话 contains() 传递给它一个顶点对象或一个边缘对象,但我不想有重复的代码。这是正确的方法吗?另外,我是不是在处理这个任务? var vertex = element / var edge = element 正确地?我想分配 element 到另一个顶点/边对象,并使用它进行查找。

    如果需要澄清,请告诉我。

    谢谢, 希斯托

    2 回复  |  直到 14 年前
        1
  •  3
  •   SLaks    14 年前

    var edge = element
    edge element

    // shouldn't come here
    return false;
    

    self.verticies Edge


    function contains(element) {
        var searchSet;
    
        // if the element is a Vertex object, do this
        if (element instanceof Vertex) 
            searchSet = self.verticies;
        else if (element instanceof Edge)
            searchSet = self.edges;
        else
            throw Error("Unexpected argument");
    
        for (var i = 0; i < searchSet.length; i++) {
            if (searchSet[i].id == element.id) 
                return true;
        }
        return false;
    }
    
        2
  •  0
  •   sje397    14 年前

    function contains(element) {
        window['contains_' + typeof element](element);
    };
    
    contains_string = function(element) {
        alert('string: ' + element);
    };
    
    contains('hi!'); // produces alert
    contains(3); // error: 'undefined is not a function'