Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #8001
| Message-ID | <2999240.SPkdTlGXAF@PointedEars.de> (permalink) |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Organization | PointedEars Software (PES) |
| Date | 2011-11-04 20:44 +0100 |
| Subject | Re: calling function within (function() {...})(); |
| Newsgroups | comp.lang.javascript |
| References | <j-mdnaRhWZiHRS7TnZ2dnUVZ_uednZ2d@westnet.com.au> <j90o0s$vmv$1@dont-email.me> <m21utoav44.fsf@nntp.bednarz.nl> <8928443.SEqChMirdb@PointedEars.de> <m2wrbfaoiv.fsf@nntp.bednarz.nl> |
| Followup-To | comp.lang.javascript |
Followups directed to: comp.lang.javascript
Eric Bednarz wrote:
> Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:
>> Eric Bednarz wrote:
>>> Gregor Kofler <usenet@gregorkofler.com> writes:
>>>> Am 2011-11-04 13:18, Andrew Poulos meinte:
>>>>> var x = (function(){
>>>>> return {
>>>>> a : function(){},
>>>>> b : function(){}
>>>>> };
>>>>> })();
>>>
>>> var x = (function () {
>>> function a() {
>>> b();
>>> }
>>> function b() {
>>>
>>> }
>>> return {
>>> a: a,
>>> b: b
>>> };
>>> }());
>>
>> There is no inherent advantage in that. In fact, it is slightly less
>> efficient than the original code because the `a' and `b' identifiers need
>> to be resolved first,
>
> If a, b[, n] are used a lot in a context where they need not be methods
> of an object, it would seem futile (and – depending on the number of
> calls – quite inefficient) to me to call them as methods of an object
> nevertheless.
The sole purpose of this code is to return a reference to a newly created
object and assign that reference to `x'. By contrast to a simple Object
literal, though, this pattern provides the possibility of "private
properties" (local variables of the created execution context) that can only
be accessed from the object's initial methods through the closure.
You have provided code that adds no inherent value to that but, in addition
to the drawbacks already mentioned, in `b', which is called by the a()
method of the object, `this' does not refer to that object. I fail to see
the logic in that.
You might also want to take note of the fact that at least one object is
always involved when a function is called in an ECMAScript implementation.
>>> window.setTimeout(x.a, 0);
>>
>> window.setTimeout(function() { x.a(); }, 10);
>
> You don’t say (I suppose creating a superfluous function object is
> justified by not resolving those pesky identifiers first :^)
The Function instance is not superfluous. If you do not use the function
expression here, then only the reference to `x.a' will be called, which
means that `x.a' will be called as a method of the object that `window'
refers to, or if you will, the global object. As a result, `this' in `x.a'
would not refer to the same object as `x', but to the other object. We have
been over this ad nauseam.
>> The asynchronous call is unnecessary here, though.
>
> That’s the problem of all artificial example code. In the origignal
> code, calling a function expression that does nothing but returning an
> object was unnecessary, too.
Your logic is flawed. *You* have introduced the unnecessary asynchronous
call for no good reason.
PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm> (404-comp.)
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
calling function within (function() {...})(); Andrew Poulos <ap_prog@hotmail.com> - 2011-11-04 23:18 +1100
Re: calling function within (function() {...})(); Gregor Kofler <usenet@gregorkofler.com> - 2011-11-04 14:06 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 14:13 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 15:49 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 16:35 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 20:44 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 21:16 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 21:24 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 21:46 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 23:29 +0100
Re: calling function within (function() {...})(); Scott Sauyet <scott.sauyet@gmail.com> - 2011-11-04 10:29 -0700
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-09 15:17 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-09 20:13 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-11 23:26 +0100
Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-11 23:31 +0100
Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-12 00:38 +0100
csiph-web