iteye_11976 2011-08-01 11:26
浏览 266
已采纳

JS初始化問題

之前在調整JS代碼結構時,將一個變量從局部變量變成全局變量。
我的構造上這樣的
var map = new Map();
。。。。

function map() { this.initialize();}
map.prototype = {}

但是在調用JS會報錯,能得到的答案是初始化的時候,map沒有定義,不知道有沒有詳細點解釋。謝謝!

  • 写回答

5条回答 默认 最新

  • myali88 2011-08-08 14:45
    关注

    [code="java"]
    var map = new Map();

    function Map() {
    //①
    this.initialize();
    }
    //②
    Map.prototype = {
    initialize : function(){}
    //,.....
    }
    //③
    [/code]
    这里的问题在于浏览器对于采用“函数式”定义的函数和采用“赋值式”定义的函数处理方式上略有不同。
    [code="java"]
    //函数式
    function func() {}
    [/code]
    [code="java"]
    //赋值式
    func = function() {}
    [/code]
    首先,浏览器对js的执行是按其定义的顺序执行的,而对于以“函数式”声明的函数在处理上采用了类似于C的预处理,所以,即使先调用函数,后声明函数,如例子中这样也不会有错。如果把例子的方式改为“赋值式”,那的第一句执行就会出错。
    当执行“new Map()”时,函数被调用,执行到“function Map()”,但是后面的“Map.prototype”还没有执行到(js的执行是顺序的),那么在Map函数内希望访问protoype上的属性也是不存在的,可以在①②③处分别增加
    [code="java"]console.log(Map.prototype);[/code]
    可以看到,前两个打印出的原型对象均不包含initialize,而第三个包含,这就是因为js代码顺序执行的缘故。

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

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog