Javascript 返回新对象的新对象上发生了什么?
我有一个对象,如果操作目标尚未注册,我打算返回一个新实例。代码的一个非常简化的版本:Javascript 返回新对象的新对象上发生了什么?,javascript,Javascript,我有一个对象,如果操作目标尚未注册,我打算返回一个新实例。代码的一个非常简化的版本: var Tangler = (function () { var targets = [], /* Array of targets Tangler operates on, no dupes. */ registry = []; /* Array of Tanglers operating on targets. */ /* Register new T
var Tangler = (function () {
var targets = [], /* Array of targets Tangler operates on, no dupes. */
registry = []; /* Array of Tanglers operating on targets. */
/* Register new Tangler */
function Tangler_entity(target) {
this.id = registry.length;
targets.push(target);
registry.push(this);
return this;
}
/* Public initiator.
* Returns existing Tangler if one with target exists. */
function Tangler(target) {
var i;
if (!target)
return null;
for (i = 0; i < targets.length; ++i) {
if (targets[i] === target)
return registry[i]; /* Return existing Tangler. */
}
return new Tangler_entity(target); /* Return new Tangler. */
}
Tangler.prototype.some_function = function () {
/* Operate on targets[this.id] */
};
return Tangler;
})();
但是,运行此代码时会发生什么情况
var tang = new Tangler(some_target);
它们似乎都运行正常,因为在正确的目标中,它们都会得到更新,并且在
new
上不会产生重复。当构造函数在使用new
时返回一个对象时,返回的对象将被视为新对象object@ArunPJohny:是,但在new tanger()上
出现双新
。另外,如果一个对象执行了new
,并且返回了一个现有对象,则其中一个对象的更新将反映在这两个对象上。是。。这两个词都指同一个词object@ArunPJohny:那么它不是指向第一个的指针吗?如果它们引用同一个对象,它们怎么可能是新对象?这难道不违背物体的意义吗?或者通过var x=new Tangler(A)
创建一个新对象,并在使用new
时将其转换为一个指针,然后在第二个var y=new Tangler(A)
上,y
成为指向x
的指针。如果一个人做了第三个var z=new Tangler(a)
的话,他最后会得到z->y->z=Obj
和y->z->Obj
。如果一个人没有使用new
的话,他最终会得到x=obj
,y->x
和z->x
。我不这么认为。。。因为作为构造函数的创建者,您显式返回一个对象,因此js引擎将尊重您的意愿,并将您返回的值视为新对象。js引擎将不知道这些值是否已由另一个对构造函数的调用返回
var tang = new Tangler(some_target);