构造函数的范围

时间:2013-06-08 15:21:07

标签: javascript

有人可以帮我澄清在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方法?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

当你执行new Car()时,this是Car的新对象实例,而不是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