在Javascript的构造函数中修改方法内的对象的属性

时间:2014-08-09 17:24:02

标签: javascript function constructor

这基本上就是我尝试做的事情(我是Javascript的新手,所以请耐心等待):

function Car(make)
{
    this.make = make;
    var noises = ["vroom", "woosh"];

    function addNoise()
    {
        noises.push("wham");
        this.noises = noises;
    }
    addNoise();
}

var myCar = new Car("honda");

console.log(myCar.noises[2]);

现在,我认为问题是当我this.noises = noises;时,this并未引用Car,所以当我尝试console.log(myCar.noises[2]);时发出警告未定义。在我的实际代码中,等效的addNoise以异步方式运行,因此我必须能够在该函数中使noises成为属性。


编辑:

是的,其他问题涉及类似的问题。这似乎有效:

function Car(make)
{
    this.make = make;
    var noises = ["vroom", "woosh"];
    var self = this;

    function addNoise()
    {
        noises.push("wham");
        self.noises = noises;
    }
    addNoise();
}

var myCar = new Car("honda");

console.log(myCar.noises[2]);

非常简单的解决方案!

1 个答案:

答案 0 :(得分:-1)

最好的方法是对函数进行原型设计

functionon Car(make)
{
    this.make = make;
    this.noises = ["vroom", "woosh"];
    this.addNoise();
}

Car.prototype.addNoise = function() {
    this.noises.push("wham");
}

var myCar = new Car("honda");

console.log(myCar.noises[2]);