是否可以定义附加到构造函数而不是构造函数实例的方法?例如:
function Person() {
//define a method
}
然后可以在构造函数本身访问该方法,例如:
Person.method() // calls the defined method
并且该方法在构造函数的任何实例上都不可用:
var person = new Person();
person.method(); // undefined
答案 0 :(得分:2)
是的,您可以这样定义:
function Person() {
// constructor initialization code here
}
// define static method
Person.sayHi = function() {
console.log("hi");
}
var bob = new Person();
Person.sayHi(); // works any time even before creating a Person object
bob.sayHi(); // undefined method
一个函数是一个可以拥有它自己的属性的对象(一个方法只是一个恰好是函数的属性)。因为这些属性不在原型上,所以它们不会被赋予从Person构造函数创建的对象,但可以从Person构造函数对象本身获得。
这些基本上是其他语言所谓的静态方法,因为它们与任何实例都没有关联。