【问题标题】:How does Undersore's _.now work?Undersore 的 _.now 是如何工作的?
【发布时间】:2015-01-30 00:21:45
【问题描述】:

它看起来不像是用 JavaScript 编写的。

如果你在控制台输入_now,你只会得到

function now() { [native code] }

您通常只有在尝试查看某些内部工作对浏览器不可见的内置方法时才会得到。

setTimeout
=>function setTimeout() { [native code] }

_.now 是否对 JavaScript 引擎的“本机代码”做了一些事情?

【问题讨论】:

  • 它可能只是使用原生函数(如果存在)。否则它会为它提供一个实现。

标签: javascript browser underscore.js v8 native-code


【解决方案1】:

默认情况下_.now 只是Date.now,除非在不支持它的环境中。在不支持 Date.now 的地方,_.now 将使用此实现(lodash 也是如此)

_.now = function() {
   return (new Date()).getTime()
};

由于您的浏览器支持Date.now_.now 只是本机实现的代理


注意:您还可以通过使用Function.prototype.bind 调用使您的任何函数在控制台中显示为本地函数

function foo() {console.log('bar');}
var bar = foo.bind(null);

console.log(bar);
// => function () { [native code] }

【讨论】:

    【解决方案2】:

    看一下下划线源码:

    _.now = Date.now || function() {
      return new Date().getTime();
    };
    

    这意味着如果存在Date.now(),它将使用它,这是一个内部函数。否则它将使用所有 JavaScript 引擎都支持的new Date().getTime()

    【讨论】:

    • 啊,我明白了。因为我的浏览器支持第一个具有本机功能的浏览器,所以我在控制台中看到的只是[native code]。我曾期望看到实际的功能。谢谢。
    【解决方案3】:

    它返回当前时间的整数时间戳。对于实现计时/动画功能很有用。

    _.now(); => 1392066795351

    【讨论】:

    • 是的,我知道它的作用。这并没有解决问题。同样感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2017-04-21
    • 2012-10-20
    • 2011-12-08
    • 1970-01-01
    • 2017-07-24
    • 2016-11-13
    相关资源
    最近更新 更多