【问题标题】:assign value to function object给函数对象赋值
【发布时间】:2015-10-05 22:35:41
【问题描述】:
我有一个名为 DummyObject 的对象,它有一个名为“值”的属性
试图通过函数'assignValue'分配一个值,但在我尝试分配它后它显示为未定义。我假设在“assignValue”函数中,“v”应该指向“this.value”,当我将它分配给它时,它应该更新“this.value”。
function DummyObject(){
this.value;
}
DummyObject.prototype.assignValue = function(val){
var v = this.value;
v = {val: val};
}
var dObj = new DummyObject();
dObj.assignValue(23);
console.log(dObj);
【问题讨论】:
标签:
javascript
object
prototype
【解决方案1】:
为对象保留了引用,但 this.value 未定义(非对象),因此它不会像您想象的那样工作。用一个对象初始化它,这将通过修改特定属性来工作。
function DummyObject() {
this.value = {};
}
DummyObject.prototype.assignValue = function(val) {
var v = this.value;
v.val = val;
}
var dObj = new DummyObject();
dObj.assignValue(23);
console.log(dObj); // {value: {value: 23}}
但是,最好的方法是直接修改this.value。
this.value = {val: val};
【解决方案2】:
JavaScript 中的变量不是这样工作的。当您使用
创建变量
v
var v = this.value;
您创建的东西完全独立于this.value,而不是this.value 的别名。如果你想更改this.value,你必须直接这样做。
this.value = {val: val};
【解决方案3】:
如果你说过,JS 不会保留你的指针:
thing = newThing
您的局部变量 v 不再指向 this.value,因此完全删除该变量。如果要设置一堆东西,可以使用一个对象,通过引用传递:
function DummyObject() {
this.value;
}
DummyObject.prototype.assignValue = function(val) {
var v = this.value = { val: val };
v.somethingElse = 'someData';
}
【解决方案4】:
查看prototype.toString 以制作自定义对象值。我认为它可能存在问题,因为我看不到它经常使用。您可能想使用dObj.value 来避免任何问题。
function DummyObject(){
this.value;
}
DummyObject.prototype.assignValue = function(val){
this.value = val;
};
DummyObject.prototype.toString = function() {
return this.value;
};
var dObj = new DummyObject();
dObj.assignValue(23);
var out = document.getElementById('out');
out.innerHTML += dObj;
<pre id="out"></pre>