javascript - 如何引用对象本身?

时间:2015-08-04 18:56:49

标签: javascript

var myObj= function(){
  console.log(self.myNum) //<- need to fix here
}
myObj.myNum=3;

myObj();

我想在myObj.myNum 中使用myObj但不使用myObj ..

console.log(myObj.myNum) // <-so not this way

console.log(this.myNum) // <-this is not what I want.

this没有引用对象本身,它指的是调用函数的内容。

甚至可能吗?

2 个答案:

答案 0 :(得分:2)

这是一个稍微不寻常的用例。如果您更详细地解释了您的问题,也许最终我们会找到更好的方法。

我看不出其他建议的答案(在+2,现在已删除)是如何工作的。我可以想到一种令人费解的方式:创建绑定函数。

可悲的是,这种天真的做法在这里不起作用,例如这段代码:

var myObj = function(){
  console.log(this.myNum);
}.bind(myObj); //this will not work

将全局对象设为this,因为在绑定调用时,myObj仍未定义。

但是,您可以创建一个附加功能,它是原始功能的绑定版本,它将this解释为原始功能(即本身),如下所示:< / p>

var myObj = function(){
  console.log(this.myNum);
};
var myBoundObj = myObj.bind(myObj);
myObj.myNum=3;

myBoundObj(); //outputs 3

此处调用myBoundObj()将根据需要输出3,并且不会通过其名称引用自身。 (但由于轻微的扭曲,这可能不适用于您的情况。创建绑定后,您在编辑中提到的调用者上下文问题不存在。)

答案 1 :(得分:2)

您可以为函数提供一个可在内部使用的额外名称:

var myObj = function myOwnObj() {
    console.log(myOwnObj.myNum)
}
myObj.myNum = 47;
myObj();