Javascript引用类型指针的方式

Javascript引用类型指针的方式
先看一个例子。
var =:1 };
var;
内= = { 2 };
console.log(内); / / /未定义
console.log(b.x); / / /对象} {对象

上面的例子似乎很简单,但效果还不是很清楚,很容易把周围的人-是内不指向对象的一个为什么日志(内)是不确定的,不应作为b.x内一样吗为什么日志中有2个对象

当然,你可以自动理解,如果能看到原因和机制,自然需要往下看。

接下来,分析这个简单代码的工作步骤,以进一步了解JS引用类型分配工作的方式。

首先

var =:1 };

var;

这里,指向一个对象{ 1 }(我们称之为对象A)。B指出A所指的对象,也就是说,此时A和B都指向A对象。
这一步很好理解,然后继续看下一行非常重要的代码:

内= = { 2 };

我们知道JS的赋值顺序总是从右到左,但因为。这是最高优先级的运算符,所以这行代码首先计算a.x.

这时发生了—由a指示的对象{ 1:}添加了属性x(虽然这个x是未定义的):
你可以从图中看到的,因为B是相同的,它涉及的对象,显示一个X属性,除了内,自然可以用b.x.

然后,按照从右到左的赋值顺序,我们首先执行a = 2:}。此时,对象A发生了变化,成为一个新对象:{ 2 }(我们称之为对象B)。
然后继续执行内=一,许多人认为这是对象B,还添加了一个属性,X,和指向对象B

但事实上,情况并非如此。因为JS计算内开始,它决定内X对象,所以当它在同一公式回内,它不会重新评估内作为对象B的X

所以内=一应该明白属性X的对象指向对象B:
结果是明显的在这个时候。当console.log(内),一个是针对对象B,但B没有对象属性X不要紧,当寻找一个对象的属性,Javascript会遍历原型链直到给定名称的属性被发现。但是看的时候因为那是原型链的顶端,object.prototype仍然没有找到指定的属性b.prototype。X,自然会输出定义。

在console.log(b.x)的时间,因为b.x X财产,这个属性是针对B,是{物}输出,{对象}可以不重视这2个对象,该对象的字符串表示形式,是隐式调用对象的toString()方法的形式是:{对象,对象}。所以{对象}是一个对象

以上是本文的全部内容,希望大家能喜欢。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部