所以我有一个名为Car的javascript类,我已经定义了它的一个实例,一个普锐斯。
Car =
function Car ()
{
var mileage = 10;
var maker = "Basic";
var model = "Model";
return {
'sellSelf' : function() { return "I am a "+ model+ " from " + maker + " with mpg "+ mileage;} ,
'getMileage' : function() { return mileage; } ,
'setMileage' : function(m) { mileage = m; } ,
'getMaker' : function() { return maker; } ,
'setMaker' : function(m) { maker = m; } ,
'getModel' : function() { return model; } ,
'setModel' : function(m) { model = m; }
};
}
Prius = new Car();
Prius.setMaker('Toyota');
Prius.setModel('Prius');
Prius.setMileage(500);
alert(Prius.sellSelf());
alert(Prius.getMileage());
我希望能够覆盖Prius的sellSelf方法,如下所示:
function sellPrius() { return "I'm a snooty car with "+getMileage()+ " mpg "; }
任何建议,我是说得对,javascript将Car视为'抽象',Car.sellSelf()失败。
感谢您的帮助!
答案 0 :(得分:5)
您可以设置prius
的方法:
Prius.sellSelf = function() { return "I'm a snooty car with " + this.getMileage() + " mpg "; }
答案 1 :(得分:4)
如果您想在JS OOP中编程,请使用prototype
。 new
前缀仅对具有修改原型的函数有意义,使用this
来访问变量和方法。使用new
时,函数的返回值为而不是。相反,返回该类的实例,该实例等于该函数中的this
变量。
原型的优点是功能是静态的,只定义一次。 Car类的一百个实例只有一组共享方法。当你使用
示例:
function Car(){
//Optional: Default values
this.maker = "Unknown manufacture";
this.model = "Unknown model";
//NO return statement
}
Car.prototype.setMaker = function(maker){this.maker = maker}
Car.prototype.setModel = function(model){this.model = model}
//Et cetera
Car.prototype.getMaker = function(){return this.maker}
Car.prototype.getModel = function(){return this.model}
//Etc
Car.prototype.sellSelf = function(){return "Model: "+this.model+"\nMaker"+this.maker}
var Prius = new Car();
Prius.setMaker("Toyota")
Prius.setModel("Prius");
//Etc
alert(Prius.sellSelf());
通过设置Car.prototype.newMethod = function(){}
可以轻松添加新方法。证明了一个巨大的优势:Car的所有实例现在都有这种方法,所以你只需要定义一次函数,而不是Prius.newMethod = ..; BMW.newMethod = ..
。
答案 2 :(得分:0)
要继承JavaScript属性/函数,您需要将它们添加到原型中,而不是添加到对象本身。这是一个简化的例子。
Car.prototype.sellSelf = function() { return "A";}
var prius = new Car();
prius.selfSell(); // returns A
//override
prius.sellSelf = function() { return "B";}
prius.sellSelf(); // returns B
编辑:这是有效的sample。