Connecting Tech Pros Worldwide Forums | Help | Site Map

Google Chrome "differences"

Gregor Kofler
Guest
 
Posts: n/a
#1: Sep 3 '08
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



--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Lasse Reichstein Nielsen
Guest
 
Posts: n/a
#2: Sep 4 '08

re: Google Chrome "differences"


Gregor Kofler <usenet@gregorkofler.atwrites:
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
Guest
 
Posts: n/a
#3: Sep 4 '08

re: Google Chrome "differences"


Gregor Kofler <usenet@gregorkofler.atwrites:
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.'
Closed Thread