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()()不知道这是主要的功能,在这种情况下用户.
在静态方法中使用这样的东西.
实际上,js中没有方法或静态方法,只有分配给对象属性的函数(函数也是对象),它们都以相同的方式工作.既然你打电话就好User.b(),this就会User打电话.
User.b = function() {
return this.a();
}
Run Code Online (Sandbox Code Playgroud)
唯一决定函数上下文的是你如何调用它。
如果使用普通标识符(函数名、变量或属性)调用它,则上下文将是全局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)