Javascript - 如何使基础参考无效?

时间:2011-08-29 12:38:16

标签: javascript reference

给出这个javascript代码:

this.underlyingReference = {name: 'joe'};

this.nullMe(this.underlyingReference);

alert(this.underlyingReference.name);

function nullMe(variable) {
   variable = null;
}

在Javascript中有没有办法让我使用“变量”来取消this.underlyingReference?我希望能够将变量置空并使基础引用变为空,而不是简单地将对引用的引用置空。

我已经阅读了关于Javascript通过引用功能传递的http://snook.ca/archives/javascript/javascript_pass这样的文章,但看起来好像当你想破坏底层引用时,行为不是我对引用的期望。

当执行通过第二行代码时,我希望“this.underlyingReference”被删除。然而,警报线显示基础参考仍然存在并且正在踢。

3 个答案:

答案 0 :(得分:4)

为什么不将null赋给该属性:

this.underlyingReference = null;
alert(this.underlyingReference);// null

或者,如果要销毁该属性,可以使用delete:

delete this.underlyingReference;
alert(this.underlyingReference);// undefined

如果您仍想进行函数调用,可以使用此设置:

var NullMe = function(obj, propName) 
{
    obj[propName] = null;
    //OR, to destroy the prop:
    delete obj[propName];
}
NullMe(this, 'underlyingReference');

答案 1 :(得分:3)

在一些情况下,Pascal和C中使用的“old by reference”和java,javascript和最新编程语言中的“by reference”之间存在混淆。

在javascript中,传递一个值,该值是对象的引用。这意味着您可以更改该引用后的对象,但不能更改引用本身。

如果您需要在方法中执行此操作,则需要“明确”执行此操作,例如:

this.nullMe("underlyingReference");
this.nullMe = function(name) {
    this[name] = null;
}

但是有一个设置null的方法有点过分工程了:)

答案 2 :(得分:3)

你可以尝试

function nullMe(obj, reference){
    delete obj[reference];
}

nullMe(this, "underlyingReference");

或者

function nullMe(reference){
    delete this[reference];
}
nullMe.call(this, "underlyingReference");