我想知道如何通过传递它作为函数的引用来初始化变量。下面是代码:
var carToy, trainToy;
function setToyValue(name, description, toy) {
toy = new makeToy(name, description);
}
function makeToy(name, description) {
this.name = name;
this.description = description;
}
function start() {
setToyValue("toy car", "red, 4 wheels", carToy);
setToyValue("train car", "green, with 5 wagons", trainToy);
console.log(carToy);
console.log(trainToy);
}
start();
显然,最后,carToy和trainToy仍然是未定义的…有什么建议吗?这里是小提琴--> http://jsfiddle.net/Osoascam/8YMsz/
JavaScript 行为这个传递通过引用不同(有些)。在JavaScript中,基本上所有东西都是按值传递的。如果你把一个对象传递给一个函数,并改变了它的一些属性,你可以在函数之外访问这些改变的值,这让我们猜测它是通过引用传递的,但实际上对于对象,变量的值是一个引用。
你实际上不能使用JavaScript实现这一点,但有一些简单的变通方法可以遵循。如果你知道JavaScript中的每个对象都是键值对字典的一种风格,并且所有变量都可以被索引器访问。
在你的情况下,正如我所说的变量的值是一个引用,改变它不会持续存在的值是毫无意义的。并且您还知道当前上下文(this
)是global
,因此您可以通过索引器访问变量并通过名称更改值。
唯一的区别是,您将函数名作为字符串传递
var carToy, trainToy;
function setToyValue(name, description, toy) {
this[toy] = new makeToy(name, description);
}
function makeToy(name, description) {
this.name = name;
this.description = description;
}
function start() {
setToyValue("toy car", "red, 4 wheels", "carToy");
setToyValue("train car", "green, with 5 wagons", "trainToy");
console.log(carToy);
console.log(trainToy);
}
start();
在我看来,这是你能做的最好的了。 你不能那样做。new
返回一个对它创建的新对象的引用,所以你应该从setToyValue
返回它,并将它赋值给start()
中的一个变量。
var carToy, trainToy;
function setToyValue(name, description) {
return new makeToy(name, description);
}
function makeToy(name, description) {
this.name = name;
this.description = description;
}
function start() {
carToy = setToyValue("toy car", "red, 4 wheels");
trainToy = setToyValue("train car", "green, with 5 wagons");
console.log(carToy);
console.log(trainToy);
}
start();