Patrick
Patrick

Reputation: 3367

Extending a function and instantiating it - javascript

--
Hello SO, Today i come before you with a humble question, As I'm obviously missing something fairly basic.

I'm trying, And I can't see why it shouldn't work, To "extend" a function.

To be specific, Consider the following code : It appears that variables have gone missing from the console.log even though they're defined.

However this doesn't seem like the right way to implement what i'm trying to achieve.

The requirement : `Extending a function with variables and methods so that all new instances of that function will receive those variables. What you could consider 'class variables'.

Super = function (){}; //yes it's global.

Super.prototype.alert = function() 
{
    console.log('alert function');  
}

ExtendSuper = function(arguments) //yes it's global
{
  **EDIT , THIS IS THE ANSWER THANKS TO YURY**

 return function () {
    return new Super(arguments);
   }

}

arguments = {} //some object with variables and functions
ExtendedFunction = ExtendSuper(arguments); //yes it's global
success = new ExtendedFunction();//yes, it's global

Upvotes: 2

Views: 69

Answers (1)

Yury Tarabanko
Yury Tarabanko

Reputation: 45121

EDIT: OP has changed the question in a way making code example irrelevant. Good for him!

You have some weird ideas about inheritance actually. I do recommend you to rethink your application before its too late. :) You do need prototypes because they are essential part of javascript.

Anyway http://jsfiddle.net/uj4ag/

var DomDom = (function(){ //Do not need a function? Use IEFE
    function View(bootstrap) //my "view" class
        {   var view = this;    
            view.$elm = false; view.model = false;
            view.render = function()
            {
                console.log('rendering something');
            }
            $.extend(view,bootstrap);
        };


    return  {
        View:  View,

        extend: {
            View: function(params) {//Let's create a new function :)
                return function() { //it is not an inheritance it is 'currying'
                    return new View(params);    
                }
            }
        }

    }
}());

var SubClass = DomDom.extend.View({ 
        foobar : true,
        alert : function () { alert('hi')},
        render : function() { console.log('rendering something else')},
});

var viewInst = new DomDom.View;
var subClassInst = new SubClass();

viewInst.render();
subClassInst.render();

Upvotes: 2

Related Questions