Как расширить объект Javascript Date? - PullRequest
21 голосов
/ 20 мая 2011

Я пытаюсь создать подкласс / расширить собственный объект Date, не изменяя сам собственный объект.

Я пробовал это:

    var util = require('util');

    function MyDate() {
        Date.call(this);
    }
    util.inherits(MyDate, Date);

    MyDate.prototype.doSomething = function() {
        console.log('Doing something...');
    };        

    var date = new MyDate();
    date.doSomething();

    console.log(date);
    console.log(date.getHours());

и это:

function MyDate() {

    }

    MyDate.prototype = new Date();

    MyDate.prototype.doSomething = function() {
        console.log("DO");
    }

    var date = new MyDate();
    date.doSomething();
    console.log(date);

В обоих случаях date.doSomething() работает, но когда я вызываю любой из собственных методов, таких как date.getHours() или даже console.log(date), я получаю 'TypeError: это не объект Date.'

Есть идеи? Или я застрял в расширении объекта Date верхнего уровня?

Ответы [ 11 ]

0 голосов
/ 24 ноября 2013

Я знаю, что это немного поздно, но для тех, кто может столкнуться с этой проблемой, мне удалось эффективно создать подкласс Date для полизаполнения, необходимого для PhantomJS.Техника, похоже, работает и в других браузерах.Нужно было решить несколько дополнительных вопросов, но по сути я следовал тому же подходу, что и Rudu.

Полный код с комментариями: https://github.com/kbaltrinic/PhantomJS-DatePolyfill.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...