訪問JavaScript對象的建構函式時失敗

來源:互聯網
上載者:User

    在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

<html>
<head>
    <title>Modal Dialog</title>
    <meta name="author" content="birdshome@部落格園" /> 
</head>
<body>
    <script>
    function ReturnValue()
    {
         window.returnValue = ['modal dialog'];
         // window.returnValue = new function foo(){}; 
         window.close();
    }   
    </script>
   <button onclick="ReturnValue()">close</button> 
</body>
</html>

    關閉快顯視窗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"。

    這個缺陷似乎對我們的影響不是很大,不過對於一些依賴於對象的constructor來實現的功能就鬱悶了,比如擷取使用者自訂對象的名稱、JavaScript物件導向編程之Singleton類、以及我上次做的一個對象Clone方法等,在這中情況下就都歇菜了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.