JavaScript别名

3
我的目标是创建一种类似于“JavaScript库”的东西,如果你愿意这样称呼它的话。我打算在浏览网页时使用它来动态加载greasemonkey脚本,以便在浏览器中操作页面。我的想法是将“win”映射到window,“doc”映射到document,“win.loc”映射到win.location,还有其他一些方便的映射,但是你应该已经明白了。你能给我一些例子让我学习语法吗?谢谢。
2个回答

11

只需像这样分配变量:

var win = window;
var doc = document;

在这种情况下,您无法分配win.loc而不修改window对象。此外,窗口对象很特殊,因为在分配win之后,您可以使用win.winwin.win.win等来获取它(window是全局对象)。

无论如何,您仍然可以将loc分配给window对象:

win.loc = window.location;

// Can now be referenced as:
loc; // (window is the global object)
win.loc;
win.location;
window.location;

这就是如何做你所要求的事情。很可能你不应该这样做。通常,框架被定义为仅使用一个全局变量,具有合适的名称:

var Blixt = (function () {
    var localVariable = 123;

    return {
        loc: window.location,
        myFunc: function () {
            alert(localVariable);
        }
    };
})();

如果您不熟悉JavaScript,所有这些都是相当复杂的东西,因此如果您刚开始学习JavaScript,则不适合从这个项目开始。


@Blixt 请查看我在问题下方的我的回答,因为我的问题对于评论来说太长了。 :) 谢谢! - Joe

0

**注意:**这实际上是对Blixt上面答案的澄清请求,而这个请求无法放在一个评论中。

好的,谢谢 - 这是一个相当不错的答案。我只想对它进行一些澄清:

  • 如果我使用你上面给出的语法定义别名,win.loc会与window.location完全一样,没有任何例外吗?(只是确认一下)

  • 我理解了大部分内容,但是关于Blixt函数的部分我不明白。定义这个函数的预期行为/结果是什么?

  • 我有点新手JS,但为什么这不是一个好主意呢?它可能会有什么负面影响吗?我只是想做像C-l javascript:win.loc=doc.ref<ENTER>这样的事情,为在另一个标签中通过CTRL点击链接打开的标签页执行简单的操作。

  • 说到这个,我有一种感觉这可能因浏览器而异,但是有没有可能让我定义一个js: URI方案并将其映射到javascript:方案?感谢您的精彩回答。


1
(1) 是的,它是对完全相同对象的引用。 (2) Blixt不是一个函数;它是由匿名函数返回的对象(请注意该函数被调用并将结果赋给Blixt)。这通常被称为“闭包”技术,意味着在函数中定义的变量会保留在那里,而不是在全局命名空间中定义。 (3) 如果你只是为自己保留这个脚本,那没关系。但是当混合使用框架时,尽可能避免影响其他框架。 (4) 不好意思,这是不可能的。 - Blixt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接