是否可以在不使用javascript中的holder对象的情况下保留对象引用? 目前,当一个对象被覆盖时,我有时会失去对下面代码段中所示的“当前”对象状态的引用;
有没有办法将“指针”放在数组中?
修改 对于提出的问题:
我在对象中拥有的是对表单字段的引用。其中一些是文本字段,其中一些是textareas,其中一些是复选框。
我希望在他们所属的直接参考旁边留一张地图。
基本上就是
obj {
this.text1 = createTextField();
this.text1.datepicker();
this.text2 = createTextField();
this.area1 = createArea();
this.check = createCheck();
this.datefields = [this.text1];
this.checkboxes = [this.check];
}
所以我可以使用datefields / checkboxes数组作为检查点来验证字段/应该表现的类型。
目前我使用
function datefields() { return [this.text1]; };
但是我想知道是否有更好的方法来做这个,而不是在我需要检查它时实例化一个新数组。
我知道有一种方法可以让观察者模仿指针行为,而且我已经摆弄了这些并且有了一些好的结果,我只是好奇是否有其他方法我不知道。
function myObject() {
this.myvalue = null;
this.arr = [this.myvalue];
}
myObject.prototype.alter = function() {
this.myvalue = "hello";
}
var x = new myObject();
var elem = document.getElementById('results');
function log(message) {
elem.appendChild(document.createTextNode(message));
elem.appendChild(document.createElement('br'));
}
log("x.myvalue = "+x.myvalue);
log("x.arr[0] = "+x.arr[0]);
log("calling alter");
x.alter();
log("x.myvalue = "+x.myvalue);
log("x.arr[0] = "+x.arr[0]);
<div id="results"></div>
答案 0 :(得分:1)
简单回答:只有对象(包括所有子类型)在JS中通过引用传递。复制所有其他简单值。
有关详细信息,我建议您阅读You Don't Know JS: Types & Grammer,但请参阅第2章中的Value vs Reference部分:
在JavaScript中,没有指针,引用的工作方式略有不同。您不能从一个JS变量引用另一个变量。那是不可能的。
进一步引述:
简单值(又称标量基元)总是由值复制分配/传递:
null
,undefined
,string
,number
,boolean
,和ES6的symbol
。复合值 - 对象(包括数组和所有盒装对象包装器 - 请参阅第3章)和函数 - 始终在赋值或传递时创建引用的副本。
有很多例子可以说明这些要点。我强烈建议您阅读以更好地理解值/引用在JS中的工作原理。
答案 1 :(得分:0)
Javascript中没有指针,尽管你可以使用包装器对象作弊。以下是此类对象的最小实现:
var Wrapper = function (value) {
this.value = value;
};
Wrapper.prototype.valueOf = function () {
return this.value;
};
然后您可以用它代替原始值:
function myObject() {
this.myvalue = new Wrapper(null); // wrapper
this.arr = [this.myvalue];
}
myObject.prototype.alter = function() {
this.myvalue.value = "hello"; // notice the ".value"
}
其余代码不需要调整。