这在javascript私有方法中引用了什么

时间:2010-02-14 00:42:13

标签: javascript methods private

使用以下代码:

function Node(){
 ....
 function foo(request){
        for (var name in this ) {
            log(name +" is "+this[name]);
            if(!(name == 'all' || typeof this[name] == 'function')){
                request[name] = this[name];
            }
        }
        return ...
    };
}

我很惊讶当调用私有函数foo this时似乎没有引用包含对象(Node的实例)。那是为什么?

当然,我可以拥有类似的东西:

 function Node(){
      var ref = this;
      ....
 }

并在ref中使用this作为foo,但有没有办法声明this是对包含对象的引用的私有方法?

2 个答案:

答案 0 :(得分:1)

'this'指的是用于调用函数的对象,默认情况下是'window'。

使用foo.apply(this,...)或foo.call(this,...)来调用foo,使foo中的'this'指向调用foo的'this'。

我使用的约定(避免.apply和.call)是:

var me = this;

function foo()
{
    // use 'me'
}

BTW,'我'是VB.NET中'this'的关键字。

答案 1 :(得分:0)

'this'的实现是不正确的,但并未“修复”导致所有混淆和变通方法。

您的var ref=this;正是您如何维护对象的引用,以便在其公共/受益成员中使用。 Douglas Crockford(谷歌)使用var that=this;