2011-05-09 78 views
5

我想在JavaScript来定义多维对象与下面的代码:JavaScript的多维对象

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(); 

结果是:

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

,但我希望

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

我在做什么错? 变量inner是一个类变量,而不是一个实例?

JavaScript引擎:Google V8。

+1

在JavaScript中思考时并不认为''instance'就'scope'而言。 – Hogan 2011-05-09 17:33:48

+0

@霍根,好点。重要的是要记住,虽然JS的结构看起来像类,但它们确实是一流的对象,需要像这样对待。 – 2011-05-09 17:44:48

回答

5

因为inner的对象字面量会被所有实例共享。它属于prototype,因此每个实例共享相同的对象。为了解决这个问题,你可以在构造函数中创建一个新的对象字面值。

+0

+1:但是您能否显示创建新对象字面值的代码? – Hogan 2011-05-09 17:40:10

+0

基本上同样的事情只需要在构造函数中完成。 'this.inner = {two:two};' – 2011-05-09 17:42:31

+0

是的,它解决了我的问题。但是在这种情况下,代码变得较少记录。 – ZeroDivisi0n 2011-05-09 17:54:56

0

inner部分是未绑定到一个实例的全局对象。