我找不到这个函数的任何描述。即使在v8源代码分析之后,对我来说仍然不清楚,因为它是以"RETURN_NATIVE_CALL(to_detail_string...“结尾的,而且我在我的源代码中找不到to_detail_string。
这里应该是关于这个函数的文档:value.html#a2f9770296dc2c8d274bc8cc0dca243e5
从v8源复制/粘贴:
V8_WARN_UNUSED_RESULT MaybeLocal<String> ToDetailString(
Local<Context> context) const;
MaybeLocal<String> Value::ToDetailString(Local<Context> context) const {
auto obj = Utils::OpenHandle(this);
if (obj->IsString()) return ToApiHandle<String>(obj);
PREPARE_FOR_EXECUTION(context, "ToDetailString", String);
Local<String> result;
has_pending_exception =
!ToLocal<String>(i::Execution::ToDetailString(isolate, obj), &result);
RETURN_ON_FAILED_EXECUTION(String);
RETURN_ESCAPED(result);
}
MaybeHandle<Object> Execution::ToDetailString(
Isolate* isolate, Handle<Object> obj) {
RETURN_NATIVE_CALL(to_detail_string, { obj });
}有人能提供任何提示或指向文档的链接吗?
我可以打电话给它,看看结果,但我希望答案将包含一些有用的信息和链接。
发布于 2015-12-09 07:10:59
这是在messages.js中由ToDetailString实现的。
发布于 2015-12-10 10:18:06
来自V8/src/messages.js的函数定义:
function ToDetailString(obj) {
if (obj != null && IS_OBJECT(obj) && obj.toString === ObjectToString) {
var constructor = obj.constructor;
if (typeof constructor == "function") {
var constructorName = constructor.name;
if (IS_STRING(constructorName) && constructorName !== "") {
return "#<" + constructorName + ">";
}
}
}
return ToStringCheckErrorObject(obj);
}还请参阅此处讨论的片段:http://logs.nodejs.org/v8/2013-02-05 ToDetailString prints #<constructor name> if the object to be printed doesn't have a custom toString method. ToString prints [object <class of object>]. ToDetailString also handles error objects differently.
https://stackoverflow.com/questions/33820428
复制相似问题