Javascript继承的问题&基类原型
Issues with Javascript inheritance & base class prototype
我在继承时遇到配置对象的问题所以我有
baseclass.prototype.activity =function(){ console.log("Im"+activity); }
以及继承基类的多个其他对象(比如A和B)。
我想根据A和B的类型配置运行因此,如果是A,那么调用run应该将活动设置为Running,与B类似,它也可以是游泳我使用以下工厂方法来创建A和B,取决于它们的类型
activityFactoryObject.prototype.makeObj = Object.create(baseclass);
activityFactoryObject.prototype.createObject = function (config) {
switch (config) {
case "running":
this.makeObj = A;
break;
case "swimming":
this.makeObj = B;
break;
}
this.makeObj.prototype = baseclass.prototype;
return new this.makeObj(config);
};
我不确定你的目标是什么,但如果它们都是从基类继承的,唯一的区别是显示什么活动,那么这样的东西就足够了:
baseClass.protoype.activity = function ( activity ) { console.log( "I'm " + activity ); };
var a = new BaseClass(),
b = new BaseClass();
a.activity( 'Running' ); // -> "I'm Running"
b.activity( 'Swimming' ); // -> "I'm Swimming"
不确定这是否是您想要的:
var Activity = function(argsObj){
this.activityType = argsObj.activityType || "Default value";
};
Activity.prototype.doIt = function(){
console.log("I am " + this.activityType);
};
var Run = function(argsObj){
//re use Activity initializer
Activity.apply(this,arguments);
};
Run.prototype=Object.create(Activity.prototype);
Run.prototype.constructor = Run;
var Swim = function(argsObj){
//re use Activity initializer
Activity.apply(this,arguments);
};
Swim.prototype=Object.create(Activity.prototype);
Swim.prototype.constructor = Swim;
function activityFactory(argsObj){
return new window[argsObj.type](argsObj);
}
var r = activityFactory({type:"Run",activityType:"running"});
var s = activityFactory({type:"Swim",activityType:"swimming"});
r.doIt();//I am running
s.doIt();//I am swimming
console.log(r instanceof Run);//true
console.log(s instanceof Swim);//true
console.log(s instanceof Activity);//true
var wrong = activityFactory({type:"Run"});
wrong.doIt();//I am Default value
有关构造函数函数和原型的详细信息:https://stackoverflow.com/a/16063711/1641941
相关文章:
- ES6构造函数返回基类的实例
- 如何通过Prototype或jquery移除子类的父类基类
- 是受(GWT)基类中方法数量影响的JavaScript对象的大小
- Javascript继承的问题&基类原型
- 如何从json函数访问javascript中的基类变量
- ExtJS4 - 从单个基类扩展不同的组件
- JavaScript 将数组推送到类原型问题
- 从继承的实例创建 JavaScript 基类对象
- “this”在不是类原型的函数中
- Javascript子类对象不保留基类的属性/方法
- Javascript子类化,超级构造函数和使用自定义扩展会丢失基类方法
- 如何在angularjs中为CRUD做基类概念
- ExtJS:在哪里定义基类的原型扩展
- Javascript“基类”中的简单“静态”
- 如何在angularjs中实现基类和派生类概念
- 在JavaScript中使用原型继承时,如何避免创建基类的实例
- ES6类:我怎么得到这个?属性在基类构造函数中分配给派生类原型
- 使用JavaScript原型并访问基类字段
- 将基类添加到现有的原型链中,以便instanceof工作
- JavaScript–原型继承而不覆盖基类