2013-08-28 66 views
0

我試圖確定一個函數的結果取決於主叫方的ScriptEngine:檢測功能的主叫方的ScriptEngine

//JScript 
function doSomething() 
{ 
    if (ScriptEngine() === "VBScript") 
     return "this is VBScript"; 
    else 
     return "this is JScript"; 
} 

但結果是:

//JScript 
var str = doSomething(); //"this is JScript" 

//VBScript 
Dim str : str = DoSomething() '"this is JScript" 

ScriptEngine()函數總是返回調用者的引擎名稱,但我想知道doSomething()調用者的引擎名稱(不通過它作爲參數)。有沒有辦法在ASP中做到這一點?

這背後的動機是我編寫了一個JSON實用程序類來在ASP網站中使用。 JSON字符串的解析通過eval完成(使用我在this答案中找到的驗證)。

eval的結果是一個JScript對象(使用JScript數組和JScript日期作爲屬性)。然後,用戶必須指定一個標誌來告訴函數是否需要純JScript對象,或者他是否需要VBScript對象(將數組和日期轉換爲其VBScript等效項)。我想消除該參數。

//JScript 
function parseJson(jsonString, isJsObject) 
{ 
    var parsedObject = parsingLogic(jsonString); 

    if (!isJsObject) //Would like to replace by engine check 
     convertVbProperties(parsedObject); 

    return parsedObject; 
} 
+0

如果很清楚爲什麼這很重要,您可能會得到更好的幫助。爲什麼調用函數的代碼在問題的上下文中寫入哪種語言? – AnonJr

+0

@AnonJr,我已經增加了這個問題的動機。 'isJsObject'參數並不是什麼大問題,但是它可以很好地擺脫它。 – Raphael

+0

這很有道理。我還沒有答案,但這會幫助其他人。 – AnonJr

回答

0

我最終保留了isJsObject參數。由於我們大多數時間都在使用VBScript,並且JScript僅用於構建庫,所以它運行良好。