Skip to content

From smalltalk to javascript and back

shaunxcode edited this page May 10, 2012 · 12 revisions

Smalltalk ♥ JavaScript

Amber maps one to one with the JavaScript equivalent:

  • String ⇔ String
  • Number ⇔ Number
  • BlockClosure ⇔ function
  • Dictionary ⇔ Object
  • Error ⇔ Error
  • etc.

##JavaScript ⇒ Smalltalk

You can easily access JavaScript objects directly from Amber and access their properties or call functions:

  1. someUser.name becomes someUser name
  2. someUser.name = "John" becomes someUser name: 'John' console.log('hello world') becomes console log: 'hello world'
  3. window.jQuery('foo').css('background', 'red') becomes (window jQuery: 'foo') css: 'background' color: 'red'

For keyword selectors, only the first keyword matters, all the other keywords will be ignored. That means our previous example could have been: (window jQuery: 'foo') css: 'background' set: 'red'

Note that you can inspect, print, etc javaScript objects from Amber. For example, you can inspect the window object.

##Smalltalk ⇒ JavaScript Amber also makes it easy to send messages to Smalltalk objects from JavaScript:

  1. Unary messages begin with an underscore: yourself becomes _yourself()
  2. Binary messages are prefixed with 2 underscores: 3@4 becomes (3).__at(4)
  3. Keyword messages follow the same rules as unary messages but with single underscores and a final underscore: aDictionary at: 3 put: 4 becomes aDictionary._at_put_(3, 4)

Smalltalk classes are added to the global smalltalk JavaScript object: Object new becomes smalltalk.Object._new();.