给出这个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”被删除。然而,警报线显示基础参考仍然存在并且正在踢。
答案 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");