使用以下代码:
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
是对包含对象的引用的私有方法?
答案 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;
。