gpt4 book ai didi

javascript - 复制/覆盖 javascript 的 console.log 函数

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

好的,这就是我要做的:

  • 我正在构建一个 Javascript->Cocoa/Objective-C 桥(实际上是一个小测试),这意味着我能够从我的 JavaScript 代码调用 Objective-C 函数。
  • 面临的问题之一是来自 console.log 的消息/错误/日志/等不可见,因此它们将被转发到相应的 Cocoa 函数(我创建了一个类似 - (void)log:(NSString*)msg 它只是将参数作为字符串并在 Xcode 的控制台窗口中打印出来。

现在,问题是我如何复制 100% console.log 所做的事情 + 将消息转发到我自己的 log 函数?

这是我到目前为止所做的:

Javascript

console.log = function(text) {
API.log_(text);
}

Objective-C

- (void)log:(NSString*)msg
{
NSLog(@"Logging from JS : %@", msg);
}

如果在调用 console.log("something") 时“text”是一个简单的文本字符串,那么它可以正常工作。如果我向 console.log 函数传递一个对象,那么它不会按预期工作(例如,在 Chrome 的 Javascript 控制台窗口中)。

你会怎么做?

是否可以获取 console.log 通常打印的字符串输出?


附言我试着玩了一下 JSON.stringify(obj, null, 4) ,但它似乎仍然不对。有什么想法吗?

最佳答案

听起来您希望保留原始功能,同时捕获输入并将其传递给您的 API。这可以通过 (JSFiddle) 之类的东西来实现:

var original = console.log,
API = {
log_: function() {
// Your API functionality
}
};

console.log = function() {
original.apply(console, arguments);
API.log_(arguments);
};

有几点需要说明。首先, native console.log 可以接收任意数量的参数,因此我们使用 arguments 来处理这个问题。我们必须使用 .apply()console 的上下文中调用原始方法,它还允许我们传递与原始调用完全相同的参数。

关于javascript - 复制/覆盖 javascript 的 console.log 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699321/

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