根据这里的#“solutions...or继承”问题,我假设我的问题可能已经在其他地方得到了回答,显然我只是不理解其他javascript。
我的问题是,为什么下面的代码( http://jsfiddle.net/Se9ZW/2/ )打印"test5“而不是"test1"?
var fake = { value:'test1'};
var fake2=fake;
fake2.value='test5';
document.getElementById('debug').innerHTML=fake.value;
这些似乎是很明显的事情,所以我甚至对提出它都有些尴尬,但我想你应该以某种方式学习。
发布于 2011-11-10 13:46:35
fake
和fake2
是对同一对象的引用,所以它们的行为完全在意料之中。它与继承无关。
现在,如果你想继承,一种方法(我可以补充说,相当幼稚)是这样做的:
var fake = { value:'test1'};
var fake2 = Object.create(fake); //creates a new object with fake as prototype
fake2.value = 'test5'; // "overrides" the value property from the prototype
console.log(fake.value);
然后输出将是:
test1
请注意,这是来自ECMAScript版本5-它是相当新的,并不是在所有JavaScript引擎实现中都能工作。
在JavaScript中实现/使用继承有多种方法。我将向您推荐其中一个解释,。
发布于 2011-11-10 13:46:01
这是因为
var fake2 = fake;
将fake引用创建到fake2中。如果您在fake2中更改了任何内容,fake也会被更改。
发布于 2011-11-10 14:01:04
也许你被术语搞糊涂了?以下是没有"reference“和”value“的解释:
{ value:'test1'}
是一个对象。你可以把它想象成一个装满东西的桶。在本例中,存储桶在名为value的内部有一件事。
在第1行,您将fake指向桶。在第二行,您将fake2指向fake。因为fake只是指向一个存储桶,所以fake2也指向完全相同的存储桶。
在第3行,fake2.value
是存储桶中名为value
的东西。在同一个存储桶中,fake2.value
是相同的东西。
同样的事情的另一种说法是,在javascript中,原语(比如:具体的东西)是通过值传递的,而对象(比如:容器和/或桶)是通过引用传递的。
https://stackoverflow.com/questions/8080362
复制