Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Simple JavaScript-like prototype-based programming in vimscript
VimL
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
autoload
doc
etc
spec/prototype
.gitignore
README
addon-info.json

README

prototype leverages vimscript's |dictionary-function|s to enable 
JavaScript-like prototype-based programming.

Example: >

    " Define a prototype
    let x1 = prototype#New({'a': 2, 'b': 3})
    function! x1.Foo(a) dict "{{{3
        return "x1-". (self.a * a:a)
    endf
    echo x1.Foo(10)
    => x1-20

    " Inherit from a prototype
    let x2 = prototype#New({'a': 33}, x1)
    echo x2.Foo(10)
    => x1-330

    echo x2.b
    => 3

    " Change the prototype
    let x1a = prototype#New({'a': 20, 'b': 30, 'c': 50})
    function! x1a.Foo(a) dict "{{{3
        return "x1a-". (self.c * a:a)
    endf
    call x2.__Prototype(x1a)
    echo x2.Foo(10)
    => x1a-500

See ../spec/prototype/prototype.vim for more examples.


                                                    *prototype-objects*
Objects~

Objects are created created with the |prototype#New()| function. Strict 
objects whose validity is checked on certain operations can be created 
with |prototype#strict#New()|.

Example: >

    let o = prototype#New({'a': 1, 'b': 2})
    function! o.Foo(x) dict
        return self.a * a:x
    endf

An object has the following additional fields and method(s):

    o.__Prototype(prototype) ... Set the prototype
    o.__prototype            ... Access the prototype
    o.__Get(key, [default])  ... Get key's value, call 
                                 o.__Default(key) if defined.
    o.__Set(field, value)    ... Set an attribute and validate

For internal use:

    o.__abstract             ... The fields that define the assured 
                                 interface of the object (those 
                                 fields not inherited from prototypes)

You should not overwrite the values of these fields. As a rule, the 
names of prototype-specific methods/attributes are prefixed with two 
underscores. Any method/attribute that is prefixed with an underscore 
won't inherited by child objects.


-----------------------------------------------------------------------

Status:  Work in progress
Install: See http://github.com/tomtom/vimtlib/blob/master/INSTALL.TXT
See http://github.com/tomtom for related plugins.

Something went wrong with that request. Please try again.