Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Google Chrome "differences"

5 views
Skip to first unread message

Gregor Kofler

unread,
Sep 3, 2008, 5:10:04 PM9/3/08
to
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

unread,
Sep 4, 2008, 12:48:58 PM9/4/08
to
Gregor Kofler <use...@gregorkofler.at> writes:

> 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 ...

> 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

unread,
Sep 4, 2008, 1:11:42 PM9/4/08
to
Gregor Kofler <use...@gregorkofler.at> writes:

> 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.

0 new messages