我可以直接调用Date对象的parse方法,如下所示:
alert(Date.parse("March 21, 2012"));
但我不能这样做:
alert(Date.getTime()); // TypeError: Date.getTime is not a function
这就是我如何运作:
alert(new Date().getTime()); // works well
那么为什么我不能像Date.parse()那样直接调用Date.getTime()?
基础问题:我编写了一个类,我想直接使用它的一些方法,如上面的Date.parse()。
答案 0 :(得分:6)
getTime
位于Date.prototype
,用于构建new Date()
个对象。
parse
本身位于Date
中,因此直接调用而不是从构造对象调用。
答案 1 :(得分:3)
在面向对象的编程中,前者称为静态方法,而后者称为实例方法。实例方法需要实例化对象的实例(因此需要new Date()
调用)。静态方法没有这个要求。
基础问题:我编写了一个类,我想直接使用它的一些方法,如上面的Date.parse()。
编写完课程后,要添加静态方法,您需要执行以下操作:
MyClass.myStaticFunction = function() {
// Contents go here.
}
答案 2 :(得分:1)
正如其他人所指出的,JavaScript使用原型来定义实例方法。但是,您可以定义静态方法,如下所示。我不是试图在这里定义整个Date
对象,而是展示如何定义它的实例和静态函数。
// constructor defined here
function Date() {
// constructor logic here
}
// this is an instance method
DateHack.prototype.getTime = function() {
return this.time_stamp;
}
// this method is static
Date.parse = function(value) {
// do some parsing
return new Date(args_go_here);
}
答案 3 :(得分:1)
function Class() {
this.foo = function() { return 123; };
}
Class.bar = function() { return 321; };
Class.bar(); // 321
( new Class ).foo(); // 123