OK, the real-world use is this: I'm writing a plugin for jquery that implements mvc pattern, and it works like this:
Define a model: $.mvc.model({ myModel: { myMethod: function() {} } }); Define a controller and call a model from the controller: $.mvc.controller({ myController: { myAction: function() { this.model('myModel').myMethod(); } } }); Here, the model & controller passed in by the user can't be stored immediately, they need to extend instances constructed by Model & Controller classes I defined somewhere else. So I need to iterate over these objects' properties to modify them. For this snippet, there is no need to wrap a function, so having $.map() works on objects won't make a big difference, but consider this: $.mvc.controller({ myController: { myAction: function() { // Pass in a callback function, // once model has retrieved the data, // it'll pass the data as the first parameter // to the callback function this.model('myModel').myMethod(function(data) { // data returned }); } } }); $.mvc.model({ myModel: { myMethod: function() { // model passes the data by returning it directly return 'data'; } }, myAnotherModel: { myAnotherMethod: function() { this.ajax({ url: './', success: function(data) { // or by returning it in the ajax callback function return data; }}) } } }); This is when I need to modify user defined functions to support such usage, and it comes the problem of scoping. It'll be very handy if $.map() works on objects. And I believe once an application gets more and more complicated, it'll stand a good chance that some kind of hash-like objects need to be modified. Regards On Oct 30, 9:38 pm, Scott Sauyet <scott.sau...@gmail.com> wrote: > On Fri, Oct 30, 2009 at 2:22 AM, gMinuses <gminu...@gmail.com> wrote: > > It's very detailed, thank you for the demos! But I don't quite > > understand the purpose of them. > > I was trying desperately to come up with some real-world use of your > suggestion, and noted that your example used callbacks, and I thought > you might want to use the technique to instrument your callback > methods in some manner. > > > If you are saying $.map() shouldn't > > work on objects because wrapping functions is not a good practice, > > then $.map() should also not work on arrays. Here is why: > > > // options now is a sequence > > var options = [ function() { this[1]() }}, function() { alert > > ('Oops') } ] > > I'd contend that it's very difficult to see a real-world use of $.map > applied to functions. > > > $.map() works on this "object", and it also causes the "problem" you > > have illustrated. Actually, I don't perceive it as a "problem". What > > you are doing is counting how many times the callback functions have > > been called. Since some callback functions will call another callback > > function, when three of them get called, it makes sense these callback > > functions have been called six times in total. > > But "helper()" was not intended as a callback function. It was an > implementation detail. By accidentally mapping that function, we've > changed the semantics in a way we wouldn't have done if we'd chosen to > apply our transformation directly to the callbacks we cared about. > > > Maybe I'm too dumb to get the essence of your demos, could you explain > > more to me? Thanks. > > It's pretty clear you're not too dumb. I'm just trying to figure out > how you'd want to use such an extended method. The callbacks made me > wonder if this was the sort of detail you had in mind. > > Cheers, > > -- Scott -- You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-...@googlegroups.com. To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en.