在特定实例上实现方法
Implement a method on a specific instance?
我有一个名为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());
我希望能够重写普锐斯的sellSelf方法,像这样:
function sellPrius() { return "I'm a snooty car with "+getMileage()+ " mpg "; }
有什么建议吗,我说javascript把Car当作"抽象",Car. sellself()失败了。
谢谢你的帮助!
您可以直接为prius
设置方法:
Prius.sellSelf = function() { return "I'm a snooty car with " + this.getMileage() + " mpg "; }
如果你想用JS OOP编程,请使用prototype
。new
前缀仅对具有修改原型的函数有意义,使用this
访问变量和方法。当您使用new
时,函数的返回值是,而不是返回。相反,返回类的一个实例,它等于该函数中的this
变量。
原型的优点是函数是静态的,并且只定义一次。Car类的100个实例将只有一个共享的方法集。当你使用
的例子:
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 = ..
。
对于要继承的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
编辑:这是工作示例。
相关文章:
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 如何用Typescript用自定义方法实现类数组
- 将setTimeout()包装器实现为Element.prototype中的方法
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 6502仿真ADC和SBC的正确实现方法
- AngularJS:有没有比指定的方法更好的方法来实现这一点
- 有哪些方法可以在html和javascript中实现持久,可共享的存储
- 在对象类上实现 jquery 作用域的最佳方法
- 在java实现中寻找javascript md5方法
- 在Javascript中实现GroupBy最有效的方法是什么
- 在node_redis上实现findBy方法,但它没有'不起作用
- 使用clearInterval方法实现的是将区间变量引用设置为null,而不是
- 实现JavaScript内部方法的源代码
- 使用UI路由器实现控制器A的最佳实践方法
- 使用getter和setter实现函数链接的方法
- 如何实现这种方法与承诺
- 在Angular Service/Controller中实现安全$apply的最佳方法
- CSS区域的实现方法
- 如何从Typescript中扩展的类实现方法?
- 在特定实例上实现方法