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