调用局部变量时可以设置值吗?这是我的代码
var myvar={
F:function(){
var x;
return x;}
}
我的问题是当我调用x变量并将值设置为myvar.F().x="hello";
时。然后回想一下console.log(myvar.F().x)
x不包含该值只返回undefined?我如何解决它但请不建议我在F函数内设置值 AND 使用F函数的参数!其他方式因为我想制作一个动态变量而不是静态值感谢您的帮助
答案 0 :(得分:1)
尽管这里有答案,但一些评论非常明确。你想要的东西是不可能的。
您可以将变量设置为函数的返回值,但我不会在任何地方保存。该引用立即丢失。
var myvar = {
f: function() {
var x = 'something';
return x;
}
}
document.write(myvar.f());

这将从对象x
内的方法f
返回myvar
。返回的对象是字符串。在您的原始代码x
中,事件未定义为某事。由于JavaScript中的所有内容都是对象,因此您可以为结果分配属性x
,如果它是defined
,但这不是这里的情况:
var myvar = {
f: function() {
var x;
return x;
}
}
var a = myvar.f();
document.write(a + "<br />");
document.write(Object.prototype.toString.call(a) + "<br />"); //returns [object Undefined]
&#13;
因此,您要将属性附加到永远不会被设置的undefined
。为了能够设置x
,您需要将其设为函数myvar
的属性。将其设置为method
只有在您不调用该方法时才有效。调用该方法会导致它返回未绑定到方法对象本身的变量。
答案 1 :(得分:1)
如果我理解正确,您希望函数调用的结果是一个有状态的对象,您可以设置并从中获取值。
我还假设您不希望从该函数返回的对象可以在父对象的任何其他位置访问。
为此,您需要更改对象的创建方式。
var Factory = function () {
var _priv = {
x: "something"
};
return {
F: function () {
return _priv;
}
};
};
var myvar = new Factory();
myvar.F().x; // "something"
myvar.F().x = "hello world"; // "hello world"
因此,初始对象的创建有点不同,但您可以获得所需的结果。
如果您不介意返回的对象属性可以在父对象的其他位置访问,那么您可以这样做:
var myvar = {
_priv: {
x: "something"
},
F: function () {
return this._priv;
}
};
myvar.F().x; // "something"
myvar.F().x = "hello world"; // "hello world"
缺点是主要对象上也可以访问_priv
属性:
myvar._priv.x; // "hello world"
这会回答你的问题吗?
答案 2 :(得分:0)
var myvar = {
F: function(x) {
if (x) {
this.x = x; // if you are setting the value of x
}
else {
return this.x; // if you want the value of x
}
}
}
myvar.F("foo"); // Setter
myvar.F(); // "foo" (Getter)
答案 3 :(得分:-1)
(您需要在浏览器上打开控制台)这有助于模仿您想要的行为吗?我不是百分之百地说你为什么要这样开始做这样的事情。
var myvar = {
f: function() {
this.x = this.x ||'';
return this;
}
}
console.log(myvar.f());
myvar.f() .x = "Not something";
console.log(myvar.f.x);
console.log(myvar.f().x);