v8 - JavaScript flerdimensionellt objekt


Jag försöker definiera ett flerdimensionellt objekt i JavaScript med följande kod:

function A(one, two) {
    this.one = one;
    this.inner.two = two;
}

A.prototype = {
    one: undefined,
    inner: {
        two: undefined
    }
};
A.prototype.print = function() {
    console.log("one=" + this.one + ", two=" + this.inner.two);
}

var a = new A(10, 20);
var b = new A(30, 40);
a.print();
b.print();

Resultatet är:

one=10, two=40
one=30, two=40

, men jag förväntar mig

one=10, two=20
one=30, two=40

Vad gör jag för fel? Är en variabel inner en klassvariabel, inte en instans?

JavaScript-motor: Google V8.

Svar #1

Eftersom objektsliteralen för inner delas mellan alla instanser. Den tillhör prototype och därför delar varje instans samma objekt. För att komma runt detta kan du skapa en ny objektsliteral i konstruktorn.

Svar #2

Den inner delen är ett globalt objekt som inte är bundet till en instans.