Javascript object properties access functions in parent constructor?

Posted by Bob Spryn on Stack Overflow See other posts from Stack Overflow or by Bob Spryn
Published on 2010-06-02T23:51:04Z Indexed on 2010/06/02 23:54 UTC
Read the original article Hit count: 153

Filed under:
|

So I'm using this pretty standard jquery plugin pattern whereby you can grab an api after applying the jquery function to a specific instance.

This API is essentially a javascript object with a bunch of methods and data.

So I wanted to essentially create some private internal methods for the object only to manipulate data etc, which just doesn't need to be available as part of the API.

So I tried this:

// API returned with new $.TranslationUI(options, container)
$.TranslationUI = function (options, container) {
    // private function?
    function monkey(){
        console.log("blah blah blah");
    }
    // extend the default settings with the options object passed
    this.settings = $.extend({},$.TranslationUI.defaultSettings,options);

    // set a reference for the container dom element
    this.container = container;

    // call the init function
    this.init();
};

The problem I'm running into is that init can't call that function "monkey". I'm not understanding the explanation behind why it can't. Is it because init is a prototype method?($.TranslationUI's prototype is extended with a bunch of methods including init elsewhere in the code)

$.extend($.TranslationUI, {
     prototype: {
            init : function(){
                // doesn't work
                monkey();
                // editing flag
                this.editing = false;
                // init event delegates here for
                // languagepicker
                $(this.settings.languageSelector, this.container).bind("click", {self: this}, this.selectLanguage);
            }
        }
    });

Any explanations would be helpful. Would love other thoughts on creating private methods with this model too.

These particular functions don't HAVE to be in prototype, and I don't NEED private methods protected from being used externally, but I want to know how should I have that requirement in the future.

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about jQuery