【问题标题】:Javascript Shallow copy of an object is undefined?Javascript 对象的浅拷贝未定义?
【发布时间】:2015-08-28 22:51:02
【问题描述】:

我大约一周前才开始学习 Javascript,所以请耐心等待。我正在尝试使用四叉树和节点作为所有对象的支持结构来制作一个基本的物理引擎。 然而在这段代码的 sn-p 中

102 Quadtree.prototype.insert= function(self, object){
103     if (object == null){
104         return;
105     }
106     var objectx,
107         objecty,
108         objectw,
109         objecth;
110     objectx = object.getDim()[0];
111     objecty = object.getDim()[1];
112     objectw = object.getDim()[2];
113     objecth = object.getDim()[3];
114     var cn = root;
115     if(cn == undefined){
116         console.log("asdgalkjh");
117     }

cn(当前节点)返回未定义。对象也是空的。 我知道我的问题是由于不知道 javascript 对象如何详细工作而引起的。有人可以给我一个摘要或指出我在哪里阅读吗?谢谢。

这是我的节点和四叉树类供参考

94 function Quadtree(width,height){
95     this.width = width;
96     this.height = height;
97     this.MAX_LEVELS = 4;
98     this.MAX_OBJ = 2;
99     var root = new Node(0,0,width,height);
100     root.split();
101 }

13 function Node(x,y,width,height){
14     var x,
15         y,
16         width
17         height;
18     this.x = x;
19     this.y = y;
20     this.width = width;
21     this.height = height;
22     var hash = 0;
23     var objects = new Array();
24     var parent = null;
25     var child1 = null;
26     var child2 = null;
27     var child3 = null;
28     var child4 = null;
29 }

我意识到我可能做错了很多事情,我来自一个沉重的 java 背景,并且 javascript 对象是通过“引用调用”传递的,到目前为止这也是令人困惑的。非常感谢任何帮助。

【问题讨论】:

  • 我对您的“调用参考”声明感到困惑。 Java 和 Javascript 都是按值传递的语言,但(几乎)所有变量都是引用。 Java 和 Javascript 在这方面的行为方式相同。
  • 啊,其实你是对的。问题仍然存在,为什么我不能将 currentnode 设置为根?
  • 只是好奇:你在做什么?是开源的吗?
  • 我正在构建一个物理引擎作为一个副项目。目前我希望它具有的主要功能是重力、用户能够投掷物体和高效的物体碰撞。我不到一周前才开始研究它,但到目前为止它真的很有趣。我想它在技术上是开源的哈哈。如果您愿意提供帮助,我会很高兴。

标签: javascript oop object parameters shallow-copy


【解决方案1】:

您正在尝试访问一个私有变量 root,该变量只能在 QuadTree 构造函数中访问。

如果您想在其他任何地方使用它,则必须创建一个 getter 或将其放入公共成员中(即 this.root = new Node(0,0,width,height);),然后使用 this.root 访问它

【讨论】:

  • 所以通过说 this.root 而不是说 var 它成为公共成员?并且 var 将其设为私有?
  • 嗯,是的,但这完全是因为 javascript 作用域是这样工作的。当您使用var 时,您将其定义为第一个包装函数(即 QuadTree),并且此函数中的所有函数也可以访问它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多