访问JavaScript对象的构造函数时失败

简介:

 在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方法等,在这中情况下就都歇菜了


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
3月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
3月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
39 1
JavaScript中对象的数据拷贝
|
3月前
|
JavaScript 前端开发
JS中的构造函数的含义和用法
构造函数是JavaScript中用于创建新对象的特殊函数,通常首字母大写。通过`new`关键字调用构造函数,可以初始化具有相同属性和方法的对象实例,从而实现代码复用。例如,定义一个`Person`构造函数,可以通过传入不同的参数创建多个`Person`对象,每个对象都有自己的属性值。此外,构造函数还可以包含方法,使每个实例都能执行特定的操作。构造函数的静态属性仅能通过构造函数本身访问。ES6引入了`class`语法糖,简化了类的定义和实例化过程。
53 1
|
3月前
|
存储 前端开发 JavaScript
JavaScript常用的内置构造函数
JavaScript提供的内置构造函数在数据处理、对象创建、异常处理和异步操作等方面发挥了重要作用。掌握这些构造函数及其用法,对于开发高效、可靠的JavaScript应用至关重要。通过合理使用这些内置构造函数,开发者可以更好地管理和操作各种类型的数据,提升开发效率和代码质量。
35 1
|
3月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
124 12
|
3月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
4月前
|
存储 JavaScript 前端开发
JavaScript 对象的概念
JavaScript 对象的概念
67 4
|
4月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
48 2
|
4月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
71 1

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62