Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
74 lines (53 sloc) 2.1 KB
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)
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)
call x2.__Prototype(x1a)
echo x2.Foo(10)
=> x1a-500
See ../spec/prototype/prototype.vim for more examples.
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
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
See for related plugins.
Something went wrong with that request. Please try again.