在JavaScript定義的對象中,不管是内部對象,還是使用者自定的對象。如果該對象是從模态視窗(Modal Dialog)中建立并傳回到主視窗中的,我們将無法在主視窗中取到該對象的構造函數(constructor)。
執行如下兩個示例:
1、Main.htm
<html>
<head>
<title>Main Page</title>
<meta name="author" content="birdshome@部落格園" />
</head>
<body>
<button onclick="GetValueFromDialog()">
click</button>
<script>
var m_Array = [];
function GetValueFromDialog()
{
var array = window.showModalDialog('dialog.htm');
alert(array.constructor);
// alert(new m_Array.constructor);
// alert(new array.constructor);
}
</script>
</body>
</html>
2、Dialog.htm
<title>Modal Dialog</title>
<meta name="author" content="birdshome@部落格園" />
function ReturnValue()
window.returnValue = ['modal dialog'];
// window.returnValue = new function foo(){};
window.close();
}
</script>
<button onclick="ReturnValue()">close</button>
關閉彈出視窗dialog.htm,執行alert(array.constructor);将會引發腳本運作時異常:
A Runtime Error has occurred.
Do you wish to Debug?
Line: 12
Error: Unexpected call to method or property access.
// Unable to evaluate the expression. Catastrophic failure
不過在這裡JavaScript的内部對象和使用者自定義對象還有一點小差別,如果是JS内部對象,我們通路對象的構造函數就立即出錯。alert(array.constructor)就異常了。而如果是使用者指定一對象,我們可以執行alert(array.constructor)得到一個顯示"[object]"的MsgBox,但是這時的contrutor仍然不支援任何的操作和執行任何方法,比如new、.toString()等,一旦執行就出和上面一樣的異常"Unable
to evaluate the expression. Catastrophic failure"。
。
本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。