我从我的控制台看到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的定义?
答案 0 :(得分:2)
函数也是一个对象,因此它可以具有与任何其他对象类似的属性,并且属性可以具有作为值的函数。
now
属性不在函数内部,它附加到函数对象。如果您在代码中重复使用:
function Date() {
// some code
}
Date.now = function(){
// some code
};
答案 1 :(得分:1)
now
是Date
对象上的一个方法,恰好是一个函数,但函数对象可以像其他对象一样具有属性。
答案 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 }});