【问题标题】:JavaScript "takeown" function?JavaScript“拥有”功能?
【发布时间】:2013-01-26 01:57:58
【问题描述】:

我想要一种快速简单的方法来“获取” JavaScript 变量的所有权。例如:

function takeown( obj ) {
     obj = obj;
}

takeown( window.undefined );

那么这会将window.undefined 设置为window.undefined 吗?

很抱歉提出 n00b 问题,但是,我是 javascript 的 n00b。

【问题讨论】:

  • ...你想做什么?
  • @PlatinumAzure 好吧,我可以做window.undefined = window.undefined,但我想知道我发布的内容是否会做同样的事情。例如。获取参数obj 并将其设置为自身。这样,当我调用 takeown() 并将 window.undefined 作为参数传递时,它会“重新定义”它。
  • 无论如何你都不能“覆盖” undefined , undefined = "blop" , undefined 仍然是未定义的。
  • 不,未定义很容易被覆盖。有关 Paul Irish 的解释,请参阅 net.tutsplus.com/tutorials/javascript-ajax/…。
  • @Kolink, no-op as in, 它什么也没做?

标签: javascript variables dom object


【解决方案1】:

这将无济于事。 Javascript 变量是对内存中对象的引用。您的函数接受一个引用并将其指向它先前引用的同一对象,使其(如 cmets 中所述)成为无操作。

如果要重新定义 window.undefined,只需将其设置为新值即可(不建议这样做)。 Javascript 不会以您可能期望的方式保护其全局变量。大多数内置值都可以重新定义或扩充。

更新

由于您在评论中明确表示您真正想要的是一种防止将来修改变量的方法,因此最好的方法是使用闭包。

闭包是一种利用 javascript 的作用域处理来模拟私有变量和保护作用域的方法。具体在这种情况下,您可以执行以下操作:

function createConstant(){

     var const = 3;
     return function(){
         return const;
     }
}

这将创建一个不可变地返回 3 的函数。所以:

createConstant()

将始终返回 3。(尽管从技术上讲,您可以重新定义 create 常量以引用新函数。在某种程度上,对于这些东西无能为力。

【讨论】:

  • 我就是这么想的。此外,它不是无限的吗?然后什么都不做……你为什么不建议做var undf = undefined?
  • 除了使用全局变量之外,没有理由这样做。不过,我不太清楚您要完成什么。
  • window.undefined = window.undefined 简单。它甚至不一定需要是“window.undefined”,但这正是我首先想到的。所以,我可以做var x = "foo"; takeown( x ); // setting x to x infinitley, so that it's not rewritable
  • 啊,我明白了。你想要的是防止另一段代码编辑变量。为此,您将需要关闭。我会更新我的答案。
  • 好的,我明白你现在想要什么了。你应该使用闭包。
【解决方案2】:

你试图做的是覆盖一个全局变量(我不明白你为什么要这样做),这样做是这样的:

window.Counter = 'whatever';
// so
window.Counter // => 'whatever'

您的函数将一个变量分配给同一个变量...无操作。 但是,undefined 自 javascript 1.8.5 (link) 以来不可写,我认为任何其他全局变量都是可写的。

干杯,

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多