[whatwg] Canvas 2d methods
Stefan Gössner
stefan at goessner.net
Sun Jul 2 07:01:46 PDT 2006
Ian Hickson wrote:
>On Sun, 2 Jul 2006, Stefan Gössner wrote:
>
>
>>Ian Hickson wrote:
>>
>>
>>>On Sat, 1 Jul 2006, Andrew Fedoniouk wrote:
>>>
>>>
>>>
>>>>In prototype based languages it is almost impossible to implement
>>>>'with' effectively in the given notation.
>>>>
>>>>ctx.moveTo(0,0).lineTo(10,10);
>>>>
>>>>is more effective. In some circumstances - in times.
>>>>
>>>>
>>>Why is it more effective for JS?
>>>
>>>
>>see
>>http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/
>>
>>
>
>I'm familiar with this, but it doesn't seem to be relevant for this case
>since all the method names are predefined and well-known.
>
>
>
If I understand this correctly, in the following code
var a=1, f=function(x){}, X={b:2,c:3};
with(X) {
a=4;
f(b);
c=5;
}
*every* variable a,b,c,f in the with-block must be dynamically checked,
if it *either* belongs to the global namespace *or/and* is a member of
X. As all variables in the block are affected, this sounds inherently
inefficient.
Despite of this fact, if every method of an object X
var X = {
a: function(){ return this;}
b: function(){ return this;}
c: function(){ return this;}
};
returns that object, we can code
with (X) {
a(); b(); c();
}
as well as more elegantly in my opinion
X.a().b().c();
So existing code -- previously using methods returning nothing --
shouldn't be affected and I can see no other drawback when adding
'return this' to every method. Modern javascript libraries (e.g. jQuery)
seem to follow the mindset:
if an object method has no explicit return value, then return the object
itself in order to allow call chains.
More information about the whatwg
mailing list