2015-11-20 29 views
0

我找不到此功能的任何說明。 即使在v8源代碼分析之後,它仍然不清楚,因爲 它以「RETURN_NATIVE_CALL(to_detail_string...」結尾,我找不到to_detail_string在我的來源中。什麼是v8 :: Value :: ToDetailString()函數?

這裏應該是一個關於此功能的文檔: https://v8docs.nodesource.com/io.js-3.0/dc/d0a/classv8_1_1_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 }); 
} 

有人能提供任何提示或文檔鏈接?

我可以稱之爲結果,但我希望答案將包含一些有用的信息和鏈接。

回答

1

這是由ToDetailString在messages.js中實現的。

0

從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); 
} 

又見A的討論從這裏片段: 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.

相關問題