Hi,
Frédéric was just missing out the `this` keyword:
var C = Class.create({
initialize: function() {
alert("ext: " + arguments.length)
this.b.apply(this, arguments);
},
b: function() {
alert("int: " + arguments.length)
}
});
Function#apply[1] and its counterpart Function#call[2] are two of the
more powerful features of JavaScript (not Prototype). the only
difference between them is how you pass in the arguments to the
function being called (as an array-like-thing [#apply] or individually
[#call]).
[1]
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Apply
[2]
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Call
HTH,
--
T.J. Crowder
Independent Software Consultant
tj / crowder software / com
www.crowdersoftware.com
On Dec 18, 1:16 pm, Davide <[email protected]> wrote:
> Hi all,
>
> I have a class defined like this
>
> var C = Class.create({
> initialize:function() {
> alert("ext: " + arguments.length)
> this.b(arguments);
> },
> b:function() {
> alert("int: " + arguments.length)
> }
>
> });
>
> when I create the class using :
>
> c= new C("aa","aa","aa","aa")
>
> I have the arguments count is 4 in the initialize part and it's 1 in
> the b function. Output is
>
> ext: 4
> int: 1
>
> Is there a way to pass the arguments from ext to int in a consistent
> way ?
On Dec 18, 1:34 pm, Davide <[email protected]> wrote:
> Hi
>
> I played a bit and your solution is giving me
> INT:2
>
> I implemented this now.
>
> var C = Class.create({
> initialize:function() {
> alert("ext: " + arguments.length)
> b.apply(arguments);
> },
> b:function() {
> alert("int: " + arguments[0].length) ;<<<<<<<<<<<<<<<<<<<
> }
>
> });
>
> which is giving correct INT / EXT values.
>
> It seems to me a bit overcomplicated.. is this the right way ?
>
> Can you please explain what would do the 'this' as you were
> suggesting ? I guess that there is something I am missing in the big
> picture...
>
> On Dec 18, 1:27 pm, Frédéric <[email protected]> wrote:
>
>
>
> > Le vendredi 18 décembre 2009 13:16, Davide a écrit :
>
> > > var C = Class.create({
> > > initialize:function() {
> > > alert("ext: " + arguments.length)
> > > this.b(arguments);
> > > },
> > > b:function() {
> > > alert("int: " + arguments.length)
> > > }
> > > });
>
> > Try:
>
> > var C = Class.create({
> > initialize:function() {
> > alert("ext: " + arguments.length)
> > b.apply(this, arguments); // <<<<<<<<<
> > },
> > b:function() {
> > alert("int: " + arguments.length)
> > }
>
> > });
>
> > --
> > Frédéric
--
You received this message because you are subscribed to the Google Groups
"Prototype & script.aculo.us" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/prototype-scriptaculous?hl=en.