Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类上的方法-静态成员_Javascript_Oop - Fatal编程技术网

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:Call
Foo.id()
在构造函数中。你说的“public member
id
”是什么意思?
this.id
是实例的属性,因此在不创建实例的情况下无法设置它(除非您打算在原型上设置它,它将应用于所有实例,包括尚未创建的实例)@Bergi我犯了一个错误。是的,this.id是实例的属性,但我还想设置一些默认值,然后在实例化或调用类上的方法时增加它。
Foo.id = (function() {
    var id = 0;

    return function() {
        return ++id;
    };
})();