gpt4 book ai didi

javascript - 函数未分配给 Chrome 中另一个函数的原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 17:57:42 25 4
gpt4 key购买 nike

以下代码在 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);

我在这里设置了一个 jsfiddle:http://jsfiddle.net/XhbZ8/2/

编辑:我能想到的唯一想法是 Chrome 正在进行某种推测性执行,但事实上我在 IE8 中也遇到了同样的问题,这让我不太愿意相信是这种情况.

最佳答案

首先检查Why are function declarations handled differently in different browsers?

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

if (typeof RegionUpdater === 'undefined') {
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(){};
...
}

因为它是这样发生的:

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

关于javascript - 函数未分配给 Chrome 中另一个函数的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com