Javascript 类上的方法-静态成员
这是构造器:Javascript 类上的方法-静态成员,javascript,oop,Javascript,Oop,这是构造器: function Foo() { this.id = 0; } 我在这里创建“类”的方法: 我想在构造函数上调用方法id(),而不创建Foo实例,其中id()方法访问公共成员id并将其设置为id+1。另外,当我创建实例时,在创建它时调用id方法并设置id成员。对我来说,第一件事就是闭包。如有任何帮助,将不胜感激,并提供进一步阅读的链接 稍后我将创建Foo的实例,以下是模板: var myFoo = new Foo({ title: "titlevalue", //
function Foo() {
this.id = 0;
}
我在这里创建“类”的方法:
我想在构造函数上调用方法id(),而不创建Foo实例,其中id()方法访问公共成员id并将其设置为id+1。另外,当我创建实例时,在创建它时调用id方法并设置id成员。对我来说,第一件事就是闭包。如有任何帮助,将不胜感激,并提供进一步阅读的链接
稍后我将创建Foo的实例,以下是模板:
var myFoo = new Foo({
title: "titlevalue", // string
price: n // ni is integer
});
我希望每个实例都有id属性,这是在实例化时生成的,因为构造函数中有默认的属性id。函数是一个对象。在函数上添加第二个属性
Foo.currentId = 0;
Foo.id = function() {
return ++Foo.currentId;
};
如果坚持将其设置为“私有”,则可以在函数内部创建函数:
Foo.id = (function() {
var id = 0;
return function() {
return ++id;
};
})();
这里的
Foo
是什么?看起来像一个对象,但op说,“我想在构造函数上调用方法id(),而不创建Foo的实例”。我试图围绕这个问题来思考,而不是怀疑你的答案。@Madbreaks:Foo
的一个实例从未在这里创建过……你是不是把Foo
和Foo混为一谈了。prototype
,也许吧?@Madbreaks:Foo
是表示绑定到名称Foo
的函数的对象。基本上,函数
块是Foo
的定义,但Foo
是表示该函数绑定的对象。调用Foo
正在执行Foo
对象的定义。@AlanKis:CallFoo.id()
在构造函数中。你说的“public memberid
”是什么意思?this.id
是实例的属性,因此在不创建实例的情况下无法设置它(除非您打算在原型上设置它,它将应用于所有实例,包括尚未创建的实例)@Bergi我犯了一个错误。是的,this.id是实例的属性,但我还想设置一些默认值,然后在实例化或调用类上的方法时增加它。
Foo.id = (function() {
var id = 0;
return function() {
return ++id;
};
})();