private-js

1.0.5 • Public • Published

Private.JS

Introduction

What is private.js?

Private.js is a JavaScript library that allows you to work with 'private' variables and methods withing JavaScript classes. The library is compatible with browsers and server-side javascript (for example node.js).

The library respects the following best-practices/conventions:

  • Adheres to 'use strict'.
  • Uses prototypes - does NOT re-create methods per instance.
  • Is fully documented with JSDoc and a MarkDown reference.
  • Follows the _underscore notation convention for private variables in JavaScript
  • Exposes a DSL for convenience.
  • Respects 'this' contract even within private scope.
  • Fully unit-tested (using nodeunit).

Documentation

You can find the documentation here.

Example

As nothing can tell you more than an example, here is one:

var Private = require('private').Private;

// If using Node.JS only:
// var util = require('util'); // Node.JS only

var MyClass = function(){

    Private.call(this); // Extend the Private class (and call the super constructor).

    // Initialize a private variable. This corresponds to this._privates
    Private(this).setValue('Some private value');

};
MyClass.prototype = Object.create(Private.prototype); // Extend the prototype

// Or using Node.JS style:
// util.inherits(MyClass, Private);

// Public getValue method with access to private variables (style 1):

MyClass.prototype.getValue = Private.hasAccess(function(privates){
    return privates.myValue;
});

// Invocation of the getValue method is transparent (as the privates are injected):
MyClass.prototype.toString = function(){

    // Invoke the getValue method - without parameters!
    return this.getValue();
};

// Or, the alternative - without parameter injection (style 2):
MyClass.prototype.getValue2 = function(){

    // Or access the private value directly, through Private(...).
    return Private(this).myValue;
};

// Declare the Private method setValue:
MyClass.prototype.privateMethod('setValue',function(privates, value){
    privates.myValue = value;
});

// Private method toJSON:
MyClass.prototype.privateMethod('toJSON', function(privates){

    // Note that 'this' within this context is the instance of MyClass, NOT the privates.
    return JSON.stringify(this); // JSON stringification will NOT include the privates.
});

Copyright

Copyright (C) 2012 by Daan Kets, Blackbit Consulting

License

Creative Commons Attribution-ShareAlike 3.0 Unported License

This library by Daan Kets - Blackbit Consulting is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. You may use this library even within a commercial product as long as you attribute to the original source. You may created derived work as long as you give back your modifications to the orignal source.

Readme

Keywords

none

Package Sidebar

Install

npm i private-js

Weekly Downloads

1

Version

1.0.5

License

none

Last publish

Collaborators

  • daankets