javascript函数可以找到另一个函数

时间:2012-05-01 10:23:07

标签: javascript prototype

我在javascript文件中有以下代码。当我运行它时,我收到错误消息:

  

“无法找到变量:addZero”。

function addZero(n) {
    return ( n < 0 || n > 9 ? "" : "0" ) + n;
}

Date.prototype.toISODate =
        new Function("with (this)\n    return " +
           "getFullYear()+'-'+ addZero(getMonth()+1)+ '-'" +
           "+ addZero(getDate()) + 'T' + addZero(getHours())+':' " +
           "+ addZero(getMinutes()) +':'+ addZero(getSeconds()) +'.000Z'");

4 个答案:

答案 0 :(得分:1)

function addZero(n) {
    return ( n < 0 || n > 9 ? "" : "0" ) + n;
}

Date.prototype.toISODate = function() {
    // do what you want here
    // with real code! not strings...
}​

答案 1 :(得分:0)

看起来您的报价已关闭。尝试

return "with (this)\n    return " +
getFullYear() + '-' + addZero(getMonth()+1) + '-' +
addZero(getDate()) + 'T' + addZero(getHours())+':' +
addZero(getMinutes()) +':'+ addZero(getSeconds()) +'.000Z';

答案 2 :(得分:0)

在生成ISO日期字符串的日期的Mozilla Javascript参考页面上有一个很好的功能

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date

    /* use a function for the exact format desired... */
function ISODateString(d){
  function pad(n){return n<10 ? '0'+n : n}
  return d.getUTCFullYear()+'-'
      + pad(d.getUTCMonth()+1)+'-'
      + pad(d.getUTCDate())+'T'
      + pad(d.getUTCHours())+':'
      + pad(d.getUTCMinutes())+':'
      + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z

答案 3 :(得分:0)

尝试重写这样的日期扩展名,以便清楚地了解to avoid using the with keyword

Date.prototype.toISODate =
  function(){

    function padLeft(nr,base,padStr){
        base = base || 10;
        padStr = padStr || '0';
        var  len = (String(base).length - String(nr).length)+1;
        return len > 0? new Array(len).join(padStr)+nr : nr;
    }    

    return [this.getFullYear(),
            '-',
            padLeft(this.getMonth()+1),
            '-',
            padLeft(this.getDate()),
            'T', 
            padLeft(this.getHours()),
            ':',
            padLeft(this.getMinutes()),
            ':',
            padLeft(this.getSeconds()),
            '.',
            padLeft(this.getMilliseconds(),100),
            'Z'].join('');
  };

padLeftZero函数现在存在于Date.toISODate方法的范围内。为清楚起见,使用数组文字来构建返回字符串。使用new Function ...将函数分配给Date.prototype.toISODate是没有必要甚至可以称为不良做法。 BTW,毫秒被添加到结果中(用零填充)。