|  | Google Chrome "differences" |  | |
| | | Gregor Kofler |  |
| Posted: Wed Sep 03, 2008 7:10 pm Post subject: Google Chrome "differences" |  |
I've augmented string objects (not the prototype) and none of the popular browsers ever complained. Until Chrome came along. Chrome won't accept something like
String.prototype.foo = function() { if (!this.bar) { this.bar = []; } // this.bar stays always undefined }
Trying a workaround I came across
String.prototype.bar = [];
String.prototype.foo = function() { this.bar.push({ o: this, p: "baz" }); return this; }
var x = "foo"; var y = "foo";
x.foo(); y.foo();
alert("".bar[0].o === "".bar[1].o);
yields false in "all" browsers. Chrome returns true.
Any comments on that?
Gregor
-- LINK ::: Landschafts- und Reisefotografie LINK ::: meine JS-Spielwiese LINK ::: Bildagentur für den alpinen Raum |
| |
| | | Lasse Reichstein Nielsen |  |
| Posted: Thu Sep 04, 2008 2:48 pm Post subject: Re: Google Chrome "differences" |  |
Gregor Kofler <usenet@gregorkofler.at> writes:
| Quote: | I've augmented string objects (not the prototype) and none of the popular browsers ever complained. Until Chrome came along. Chrome won't accept something like
String.prototype.foo = function() { if (!this.bar) { this.bar = []; } // this.bar stays always undefined } .... and ... |
| Quote: | yields false in "all" browsers. Chrome returns true.
Any comments on that?
|
Well spotted. It's not standard-compliant.
It's a lousy standard at that point - requireing the creation of a new object every time you access a property of a basic string value .... like the *length*! - but still, it is the spec.
/L -- Lasse Reichstein Nielsen DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html> 'Faith without judgement merely degrades the spirit divine.' |
| |
| | | Lasse Reichstein Nielsen |  |
| Posted: Thu Sep 04, 2008 3:11 pm Post subject: Re: Google Chrome "differences" |  |
Gregor Kofler <usenet@gregorkofler.at> writes:
| Quote: | I've augmented string objects (not the prototype) and none of the popular browsers ever complained. Until Chrome came along. Chrome won't accept something like
String.prototype.foo = function() { if (!this.bar) { this.bar = []; } // this.bar stays always undefined
|
A little testing shows the core problem: --- String.prototype.foo = function() { return typeof this; } alert("x".foo()); // alerts "string" ---
I.e., some optimization that prevents creating new objects, that probably works well for built-in functions, is also applied to user-added methods on String.prototype. Same problem exists for Number and Boolean.
/L -- Lasse Reichstein Nielsen DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html> 'Faith without judgement merely degrades the spirit divine.' |
| |
|
|