通过传递对函数的引用来初始化变量



我想知道如何通过传递它作为函数的引用来初始化变量。下面是代码:

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();

相关内容

  • 没有找到相关文章

最新更新