首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何引用窗口函数和属性

如何引用窗口函数和属性
EN

Stack Overflow用户
提问于 2014-06-03 06:50:39
回答 1查看 37关注 0票数 0

我正在尝试创建一个自定义对象,它具有浏览器“窗口”对象的所有属性和功能。任何模仿窗口对象函数的函数都应该只引用原始窗口对象,并在原始上下文中执行。

因此,新对象中任何方法都应该只指向具有原始上下文的现有窗口对象函数

代码语言:javascript
运行
复制
NEWOBJECT.FUNCTON_NAME  ->  WINDOW.FUNCTION_NAME 

我该怎么做呢?

有没有可能这样做?

我试着这样做:

代码语言:javascript
运行
复制
function OurWindow() {

}

var obj = window;

do Object.getOwnPropertyNames(obj).forEach(function(key) {

    var ptype = Object.prototype.toString.call(window[key]).slice(8, -1);
    // if function
    if (ptype == 'Function') {

        OurWindow.prototype[key] = window[key].bind(window);

    }

});
while(obj = Object.getPrototypeOf(obj));

但是我遇到了像" object“这样的函数/属性的问题,这些函数属于函数类型,并且有自己的子函数,它们不会在新的重复对象中被引用。

例如

代码语言:javascript
运行
复制
 OurWindow.Object.getOwnPropertyNames  is undefined
EN

回答 1

Stack Overflow用户

发布于 2014-06-03 07:53:22

我猜您希望所有的全局方法都通过这个设置调用到全局对象中。因此,您可能会做如下操作(请注意,这需要ES5方法,如果功能测试显示它们不可用,则这些方法必须是多填充的):

代码语言:javascript
运行
复制
(function(globalObject) {
  var globalProps = Object.getOwnPropertyNames(globalObject);
  globalProps.forEach(function(v) {

    if (typeof globalObject[v] == 'function') {
      globalObject[v] = globalObject[v].bind(globalObject);
    }
  });
}(this));

但是你为什么要这样做呢?也许您正在使用严格模式,并且不希望在未提供基引用的情况下调用全局方法时未定义此模式?但在我看来,这似乎只对本机方法有意义,而不是内置方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24004526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档