https://github.com/tomtom/prototype_vim
Simple JavaScript-like prototype-based programming in vimscript
https://github.com/tomtom/prototype_vim
Last synced: 3 months ago
JSON representation
Simple JavaScript-like prototype-based programming in vimscript
- Host: GitHub
- URL: https://github.com/tomtom/prototype_vim
- Owner: tomtom
- Created: 2010-08-12T16:48:06.000Z (almost 16 years ago)
- Default Branch: master
- Last Pushed: 2013-10-20T14:38:43.000Z (over 12 years ago)
- Last Synced: 2025-02-22T05:27:56.291Z (over 1 year ago)
- Language: VimL
- Homepage:
- Size: 109 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README
Awesome Lists containing this project
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.