静态方法中的Javascript"this"

Mat*_*zzi 2 javascript oop static-methods class

我有这样的代码:

User = function(){}

User.a = function(){
  return "try";    
}

User.b = function(){

}
Run Code Online (Sandbox Code Playgroud)

从User.b()我可以使用以下方法调用User.a():

User.b = function(){
    return User.a();
    }
Run Code Online (Sandbox Code Playgroud)

但不使用它,因为它不是用户的实例(User.a()和User.b()类似于"静态方法").

我想要做的是能够调用从User.b User.a()()不知道这是主要的功能,在这种情况下用户.

在静态方法中使用这样的东西.

Esa*_*ija 6

实际上,js中没有方法或静态方法,只有分配给对象属性的函数(函数也是对象),它们都以相同的方式工作.既然你打电话就好User.b(),this就会User打电话.

User.b = function() {
    return this.a();
}
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 6

唯一决定函数上下文的是你如何调用它。

如果使用普通标识符(函数名、变量或属性)调用它,则上下文将是全局window对象:

someFunction();
Run Code Online (Sandbox Code Playgroud)

如果您使用句点调用它来访问对象成员,则上下文将是对象:

someObject.someFunction();
Run Code Online (Sandbox Code Playgroud)

如果将对象中的成员复制到变量,则不再与该对象连接,并且将使用window上下文调用它:

var x = someObject.someFunction;
x();
Run Code Online (Sandbox Code Playgroud)

如果将函数作为属性分配给对象,并使用该对象调用它,则上下文将是该对象:

someObject.x = someFunction;
someObject.x();
Run Code Online (Sandbox Code Playgroud)

对于您的特定情况,User是一个函数,它也是一个对象。

如果您使用 调用函数User.b,它的上下文将是User对象,在这种情况下恰好是一个函数。在函数中,您仍然可以使用它this来访问上下文:

User.b = function(){
  return this.a();
}
Run Code Online (Sandbox Code Playgroud)