将类属性设置为函数 - 在创建类的实例时是否会调用该函数?

时间:2013-01-11 14:13:41

标签: javascript class function

如果我写这个:

function thing() {
    this.timer = Date.now();
}

每次创建一个类的实例时,Date.now()会返回我创建类实例的时间,还是只返回加载脚本的时间?

对于noob问题抱歉。

4 个答案:

答案 0 :(得分:2)

每次调用构造函数的主体都会执行。就像任何其他功能一样。由于构造函数的主体调用Date.now,因此每次都会调用它。

如果每次都没有执行,那么每个实例都会共享所有相同的属性......这会使它失败!

但是,您可能一直在考虑thing.prototype。如果将timer设置为该属性,则将针对每个实例进行评估,并且每个实例将共享相同的属性(因此具有相同的值):

thing.prototype.timer = Date.now(); // Not what you want!

看看this example。注意前两次是不同的,第二次是相同的。

答案 1 :(得分:1)

它会返回您创建实例的时间,

function thing() {
    this.timer = Date.now();
    console.log(this.timer)
}

//两者都会记录不同的时间。

new thing();
new thing()

答案 2 :(得分:1)

this.timer将始终返回thing实例化的时间值。调用new thing()时,将为该实例设置一次,除非明确重置,否则将始终返回此值。

小提琴: http://jsfiddle.net/sajjansarkar/QrUWR/1/

function thing() 
{
    this.timer = Date.now();
}

var o1 = new thing();
alert(o1.timer);
alert(o1.timer);

var o2 = new thing();
alert(o2.timer);
alert(o1.timer);

答案 3 :(得分:0)

来自specification

  

now函数返回一个Number值,该值是指定调用now的UTC日期和时间的时间值。

所以,

  

Date.now()每次创建一个

时,都会返回我创建类实例的时间