javascript- Date.now是Date函数中的嵌套函数吗?

时间:2015-08-20 15:42:56

标签: javascript

我从我的控制台看到Date是一个函数,(typeof Date显示函数)。而Date.now是一个函数。

我知道函数Date()可以包含在其中var now=function....但是now无法从外部访问,它只是本地的。它可以说this.now但现在只有在使用new调用Date()时才会存在。我可以看到typeof Date是一个字符串,而typeof新的Date()是一个对象。所以Date是一个函数..所以我无法看到我可以做Date.now

我现在看到'在mdn上为Date对象列出,但我不知道它将放在本机代码中的位置,例如如果有人写一个对象Blah,用Blah.func调用函数,我们在哪里放置func的定义?

4 个答案:

答案 0 :(得分:2)

函数也是一个对象,因此它可以具有与任何其他对象类似的属性,并且属性可以具有作为值的函数。

now属性不在函数内部,它附加到函数对象。如果您在代码中重复使用:

function Date() {
  // some code
}

Date.now = function(){
  // some code
};

答案 1 :(得分:1)

nowDate对象上的一个方法,恰好是一个函数,但函数对象可以像其他对象一样具有属性。

答案 2 :(得分:1)

我认为@ Guffa的答案是正确的,但我想提供其他例子。

如果我理解你的话,你会问下一个行为:

var blah = function() {

};

blah.now = function() {
    new Date();
};

检查类型:

console.log(typeof blah);     // function
console.log(typeof blah.now); // function

答案 3 :(得分:0)

函数是一个对象

typeof function(){}表示“function”,尽管function是一个对象

(function(){}) instanceof Object< - 返回true

所以你可以说在Date构造函数之外会有一行说Date.now = function(){...}

为Date函数对象赋予属性。

这有点像java的静态。但它有所不同,因为javascript没有类,它实际上属于Date对象,Date是Object的一个实例。此外,它与java的静态不同,因为Date的实例无法访问属性,除非它们执行Date.xyz同样,因为您在窗口对象中,所以只需键入var xyz = function(){就不能创建xyz ..}你必须做Date.now=function(){..}

<强> ADDED

更准确的是,如果函数有一个名称,因为Date.now返回function now()所以代替Date.now=function(){...},更准确地说Date.now=function now(){...}但是一个可以是now比那更准确..

也是

(基于torazaburo提到的想法)

Torazaburo指出Date的Object.defineProperty(Date,'noww',{enumerable:false, value:function noww(){}})<ENTER> 函数不可枚举。所以我想用Object.defineProperty来定义它就像这样。

Date.noww<ENTER> 
function noww()  <--- like if I'd entered Date.now<ENTER>

Date.propertyIsEnumerable('noww');
false  <-- like if i'd entered Date.propertyisEnumerable('now')

Date.propertyIsEnumerable('now');
false

Date.hasOwnProperty('now');
true

Date.hasOwnProperty('noww');
true

使用值创建属性。

当一个属性是可枚举的时,你必须使用那里的值创建它,而不是稍后分配它。 (尝试分配给一个可枚举的:false属性只会给出undefined。

所以现在我们创建的noww函数与Date非常相似(尽管没有主体'cos函数中的功能并不是真正的问题)。

this.transitionTo('conversations', { queryParams : { itemCount = 0 }});