javascript练习题

     function Vertex(city, x) {
            this.name = city;
            this.num = x;
        }
        var node0 = new Vertex("邯郸", 0);
        var node1 = new Vertex("邢台", 1);
        var node2 = new Vertex("石家庄", 2);
        var node3 = new Vertex("衡水", 3);
        var node4 = new Vertex("保定", 4);
        var node5 = new Vertex("沧州", 5);
        var node6 = new Vertex("廊坊", 6);
        var node7 = new Vertex("张家口", 7);
        var node8 = new Vertex("承德", 8);
        var node9 = new Vertex("唐山", 9);
        var node10 = new Vertex("秦皇岛", 10);
        var vex = [node0, node1, node2, node3, node4, node5, node6, node7, node8, node9, node10];

        function Graph(num) {
            this.verticesnum = num;
            this.edges = 0;
            this.adj = [];
            this.edgeTo = [];
            for (var i = 0; i < this.verticesnum; i++) {
                this.adj[i] = [];
            }
            this.addEdge = addEdge;
            this.showGraph = showGraph;
        }
        function addEdge(v, w, x)//此处形参是结点索引
        {
            this.adj[v][w] = x;
            this.adj[w][v] = x;
            this.edges++;
        }
        function showGraph() {
            for (var i = 0; i < this.verticesnum; i++) {
                document.write(vex[i].name + "->");
                for (var j = 0; j < this.verticesnum; j++) {
                    if (this.adj[i][j] != undefined) {
                        document.write(this.adj[i][j] + "公里" + vex[j].name);
                    }
                }
                document.write("<br>");
            }
        }
        g = new Graph(11);
        g.addEdge(0, 1, 58.67);
        g.addEdge(1, 3, 153.87);
        g.addEdge(1, 4, 248.41);
        g.addEdge(1, 5, 308.3);
        g.addEdge(1, 6, 390.18);
        g.addEdge(1, 7, 543.12);
        g.addEdge(1, 8, 621.59);
        g.addEdge(1, 9, 529.74);
        g.addEdge(1, 10, 673.94);
        g.addEdge(2, 3, 143.83);
        g.addEdge(2, 4, 142.35);
        g.addEdge(2, 5, 230.0);
        g.addEdge(2, 6, 390.18);
        g.addEdge(2, 7, 543.12);
        g.addEdge(2, 8, 621.59);
        g.addEdge(2, 9, 529.74);
        g.showGraph();

  上周末一个同学拿了一段js代码给我看,说实话起初看起来懵懵的,不过仔细研究一下很有趣,据他介绍这是一段c++入门的代码 ,我很好奇为啥能用js实现,不过想到很多js底层都是c++和c写的也就不足为奇了! 这段代码直接服务制到浏览器是可以正常执行的,废话不多说了,说一下我对这段代码的理解:

      首先浏览器加载从上到下var声明了很多全局变量,js里面是这样的它全部在javascript内部而不是function内部这段参考一下js里面作用域的概念,此时的this赋值了几个全局变量和function放到内存中,而当调用graph这个函数他内部调用了this这时候的this指的是graph这个函数体,并且设置了几个属性,属于私有属性,并且赋值给了属性两个函数,而这个函数正是加载全局的时候内部加载的两个函数体add和show,当全局变量g去调取graph这个函数的时候他的属性也被加载并且可以找到方法的索引,执行完毕之后浏览器里面能直接查询到这点:

  

     之后向下继续执行,直到所有方法执行完毕并在浏览器里面显示出参数.

     另外还有一种不知道正确不正确的理解方式,就是以类的概念去理解函数,定义graph方法相当于定义了graph类里面加载各种属性和方法,当执行到这个类之后相同命名空间下去调用对应方法最后输出

     希望看到此贴的各位大神多多指出其中错误,方便日后改进.

原文地址:https://www.cnblogs.com/workstation-liunianguowang/p/6508584.html