Add functions to another ones

Discussion in 'Javascript' started by Archos, Feb 18, 2012.

  1. Archos

    Archos Guest

    Is there any way for that a function can be added/embedded to a
    constructor?

    function hello() {console.log("hello")}
    function Sum(x, y) { this.a=a; this.b=b; }

    In that example I would want that function hello() can be added to
    Sum()
     
    Archos, Feb 18, 2012
    #1
    1. Advertisements

  2. Archos

    tema Guest

    function hello() {console.log("hello")}
    function Sum(x, y) { this.a=x; this.b=y; }

    Sum = (function(SumOld) {
    hello();
    return SumOld;
    })(Sum);

    var h = new Sum(2, 3);
    console.log(h);

    http://jsfiddle.net/WS4fz/
     
    tema, Feb 18, 2012
    #2
    1. Advertisements

  3. Archos

    tema Guest

    function hello() {console.log("hello")}
    function Sum(x, y) { this.a=x; this.b=y; }

    Sum = (function(SumOld) {
    function construct(constructor, args) {
    function F() {
    return SumOld.apply(this, args);
    }
    F.prototype = constructor.prototype;
    return new F();
    }

    return function() {
    hello();
    return construct(SumOld, [2, 3]);
    }
    })(Sum);

    var h = new Sum(2, 3);
    console.log(h);

    http://jsfiddle.net/agentcooper/qLMUz/
     
    tema, Feb 18, 2012
    #3
  4. Archos

    tema Guest

    Here you go http://jsfiddle.net/agentcooper/qLMUz/
     
    tema, Feb 18, 2012
    #4
  5. Archos

    Archos Guest

    Thanks. Although I thought that I could be done easily using 'apply'
    or a similar function.
     
    Archos, Feb 18, 2012
    #5
  6. In first place it would be nice if the next time you post your code to
    be directly here. It is definitely easier to quote different parts of
    your code if it is in messages. Of course you could post here and post
    link in jsfiddle. Also if jsfiddle removes your code the archive of
    the group will store a broken link. In the last place not everyone is
    on the web in newsgroup like that.

    Such a design is better to avoid. I would use wrapper or subclassing
    `Sum' instead of overwriting the constructor. Your approach after
    overwriting the `Sum' with new function If I would like to extend the
    `Sum.prototype', I would have a big problem. The `Sum' is not longer
    constructor, it is factory for overwritten `Sum'.

    Sum.prototype.missedLogic = function () {
    console.log('Missed logic');
    };

    var h = new Sum(2, 3);
    h.missedLogic(); //TypeError

    If you and the author want real overwritten constructor, you could
    use:

    function hello() {console.log("hello")}
    function Sum(x, y) { this.a=x; this.b=y; }


    Sum = (function () {
    var _Sum = Sum;
    function SumWrapper() {
    _Sum.apply(this, arguments);
    hello();
    }
    SumWrapper.prototype = new _Sum;
    return SumWrapper;
    })();
     
    Asen Bozhilov, Feb 18, 2012
    #6
  7. Have you realised that you've been asking some very peculiar questions.
    Have you spent some time working out what you want to do, without
    worrying about how to do it ?

    If you have, have you understood the way prototypes work and how they
    can help you ?

    John
     
    John G Harris, Feb 18, 2012
    #7
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.