1

有人可以帮我澄清在javascript中创建构造函数的两种方式之间的区别吗?这是代码:

var globarcheck= this;
var Car = function(color){
    this.color= color;
    /*this.prototype.Go = function()
    {
        console.log(this.color+" "+"Car going...");
    };*/
};

Car.prototype.Go= function(){
    console.log(this.color+" "+"Car going...");
};
var aCar = new Car("green");
var bCar = new Car("yellow");
aCar.Go();
bCar.Go();

上面的代码有效,但为什么我不能使用注释掉的代码来做同样的事情来分配 Go 方法?

4

2 回答 2

6

在注释掉的代码中,您试图将方法与实例关联,而不是类型本身。原型旨在在类型级别(Car)创建成员,而不是针对特定实例

于 2013-06-08T15:24:59.280 回答
0

当你这样做时new Car()this是 Car 的新对象 instanceof,而不是函数 Car。

因此,在创建构造函数的新对象(实例)之前,您确实添加了原型共享函数。

您可以做的是在构造函数中设置一个实例函数(不是原型共享):

var Car = function (color, useGoInInstance) {
    this.color = color;

    if (useGoInInstance) {
        this.Go = function ()
        {
            console.log(this.color+" "+"Car going (instance override)...");
        };
    }
};

Car.prototype.Go = function () {
    console.log(this.color+" "+"Car going (shared)...");
};
var aCar = new Car("green");
var bCar = new Car("yellow", true);
aCar.Go(); // uses shared function
bCar.Go(); // uses instance function
于 2013-06-08T15:30:59.253 回答