I was actually curious about this in Ruby as well, since Ruby also doesn't have the Smalltalk message syntax.
I figure that the magic behind it is that Smalltalk takes strings like "dict at: 'foo' put: 'bar'" and evaluates them into a JavaScript equivalent of "dict['at:put:']('foo', 'bar')". Basically, my proof of concept(I cheated with regex to cut time): 'use strict'; var Dictionary = function Dictionary() { this.dict = {}; }; Dictionary.prototype['at:put:'] = function(index, value) { this.dict[index] = value; }; Object.defineProperty(Dictionary, 'new', { get: function () { return new this; } }); function st_eval(str) { var x = str.match(/(dict)\s+(at):\s+'(foo)'\s+(put):\s+'(bar)'/); var target = x[1]; var callName = x[2] + ':' + x[4] + ':'; var argv = [x[3], x[5]]; var realTarget = eval(target); realTarget[callName].apply(realTarget, argv); } var dict = Dictionary.new; console.log(dict); //dict['at:put:']('foo', 'bar'); console.log(dict); st_eval("dict at: 'foo' put: 'bar'"); console.log(dict); -- View this message in context: http://forum.world.st/How-do-Smalltalk-disambiguate-messages-tp4918946p4918957.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.