Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未将函数分配给另一个函数';铬合金的原型_Javascript_Prototype_Function Prototypes - Fatal编程技术网

Javascript 未将函数分配给另一个函数';铬合金的原型

Javascript 未将函数分配给另一个函数';铬合金的原型,javascript,prototype,function-prototypes,Javascript,Prototype,Function Prototypes,以下代码在Firefox中正常工作,但在Chrome中不正常? 如果注释掉第15行以防止第7行出现错误(找不到this.update()),代码将继续正确执行。我不明白为什么第一组定义与第一组不同 if (typeof RegionUpdater == "undefined") { function RegionUpdater(param1, param2, param3) { this.paramA = param1; this.paramB = par

以下代码在Firefox中正常工作,但在Chrome中不正常? 如果注释掉第15行以防止第7行出现错误(找不到this.update()),代码将继续正确执行。我不明白为什么第一组定义与第一组不同

if (typeof RegionUpdater == "undefined") {
    function RegionUpdater(param1, param2, param3) {
        this.paramA = param1;
        this.paramB = param2;
        this.paramC = param3;

        this.update();
    }

    RegionUpdater.prototype.update = function() {
        alert("hi there");
    };
}

var ru = new RegionUpdater("1", 2, "3");

function LolUpdater(param1, param2, param3) {
    this.paramA = param1;
    this.paramB = param2;
    this.paramC = param3;

    this.update();
}

LolUpdater.prototype.update = function() {
    alert("hi there");
};

var lu = new LolUpdater(1, 2, 3);
我在这里有一个JSFIDLE设置:

编辑:我唯一能想到的是Chrome有一些推测性的执行,但事实上我在IE8中也遇到了同样的问题,这让我不太相信会发生这种情况。

首先检查

这似乎是一个提升问题。
if
语句被忽略,因为会发生以下情况:

if (typeof RegionUpdater === 'undefined') {
  function RegionUpdater() {}
}
var RegionUpdater;
if (typeof RegionUpdater === 'undefined') {
  RegionUpdater = function RegionUpdater(){};
  ...
}
由于函数被提升(移动到)最近的作用域(函数)的顶部,在这种情况下,作用域是全局对象,因此将在下文中解释上述内容

function RegionUpdater() {}
if (typeof RegionUpdater === 'undefined') {
  // won't run since RegionUpdater is already defined
}
您可以这样解决它:

var RegionUpdater = RegionUpdater || function RegionUpdater(){

};
编辑:如Mics所说,使用函数表达式应该可以:

if (typeof RegionUpdater === 'undefined') {
  var RegionUpdater = function RegionUpdater(){};
  ...
}
因为事情就是这样发生的:

if (typeof RegionUpdater === 'undefined') {
  function RegionUpdater() {}
}
var RegionUpdater;
if (typeof RegionUpdater === 'undefined') {
  RegionUpdater = function RegionUpdater(){};
  ...
}

这很可能是起重问题,起作用了,但不起作用。您只看到第二个警报框,而不是第一个。你能解释一下什么是起重问题吗?看看我的回答是否有帮助。也不确定这是否是问题所在…或者使用函数表达式和赋值而不是像这样的声明:
var RegionUpdater=function(){…}
Mics建议的第四个代码示例就是我问题的答案。非常感谢你们两位。