gpt4 book ai didi

javascript - 为什么 JavaScript 函数别名不起作用?

转载 作者:行者123 更新时间:2023-12-03 03:10:59 27 4
gpt4 key购买 nike

我有一些 Firebug 控制台函数调用,我想在未启用 Firebug 时禁用它们,例如控制台未定义。这在 IE6 和 FF3 中工作正常,但在 Chrome 中不行:

var log;

if(console){
log = console.log;
}else{
log = function(){ return; }
}

我在 Chrome 中收到“未捕获的类型错误:非法调用”=/

我读到了有关此问题的信息 here ,你必须应用一个上下文,这对我来说有点新......而且我似乎不知道如何在所有浏览器中完成上述任务......

最佳答案

是的,您应该保留上下文:

var log;

if (window.console && typeof console.log === "function"){
// use apply to preserve context and invocations with multiple arguments
log = function () { console.log.apply(console, arguments); };
} else {
log = function(){ return; }
}

发生的情况是,当您调用函数时,会隐式设置上下文(this 值),例如:

var obj = {
method: function () { return this; }
};

obj.method() === obj; // true

在本例中,您正在调用一个定义为对象属性的函数,当调用该函数时,this 值将设置为该对象。

现在就像您的示例一样,如果您将该方法的引用复制到变量:

var method = obj.method;
method() === window; // global object

如您所见,this 值引用全局对象。

因此,为了避免这种隐式行为,您可以使用 call 显式设置上下文。或apply功能。

关于javascript - 为什么 JavaScript 函数别名不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653963/

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