最近我开始学习JavaScript中的面向对象编程。我的理解是,当引用变量时,我们实际上并不参考它们的实际值,而是参考内存中的位置。这就是为什么所有这些“返回这个”方法,应该复制实例不起作用。本地对象引起的奇怪行为是什么?
因此,示例代码:既卓智和ITwo的的
//An example object with a simple property and
//failing "copy" function.
function MyObject()
{
this.myProperty = 123;
this.copy = function() { return this; };
}
var iOne = new MyObject();
var iTwo = iOne.copy();
iTwo.myProperty = 321;
现在“myProperty的”属性等于321,因为“复制”方法返回而不是值的参考。这种行为是预期的,并且一切都很好。现在
,我试图做同样的与本机对象类型,数量。让我们以更面向对象的程序员友好的方式创建它的一个实例:
var iOne = new Number(123);
var iTwo = iOne; //Equals "iTwo = iOne.copy()", except there isn't a copy method
iOne = 321;
而现在,发生了一些可怕的事情。卓智等于321,但是ITwo的保持它的价值,仍然等于123
我不知道这是什么行为引起的。也许Number是某种“特殊”的?也许与它相关的十进制数字不仅仅是一个属性?或者,也许这只是为了让缺乏经验的程序员的生活更轻松?最后一个选项与操作员有关。如果有人对此有所了解,请不要让我理解JavaScript的方式崩溃。
如果您在最终作业后检查'iOne'的类型,您将看到''number'',但'iTwo'的类型是''Object'' – 2013-02-17 01:28:56
这与本机对象没有任何关系与非本地的。在你的第一个例子中,如果你将'iTwo.myProperty = 321'改为'iTwo = 321',你会发现后者不会影响'iOne';在你的第二个例子中,如果你将'iOne = 321'改为'iOne.myProperty = 321',你会发现后者会影响iTwo。 – ruakh 2013-02-17 01:30:07