Google Chrome "differences"

G

Gregor Kofler

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
 
L

Lasse Reichstein Nielsen

Gregor Kofler said:
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
 
L

Lasse Reichstein Nielsen

Gregor Kofler said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,049
Latest member
Allen00Reed

Latest Threads

Top