【发布时间】:2012-07-24 13:18:26
【问题描述】:
我正在用 JavaScript 设计一些类层次结构。到目前为止它工作正常,但我看不出如何确定一个对象是否是父类的“实例”。示例:
function BaseObject(name){
this.name = name;
this.sayWhoAmI = function(){
console.log(this.name + ' is a Derivation1 : ' + (this instanceof Derivation1));
console.log(this.name + ' is a Derivation2 : ' + (this instanceof Derivation2));
console.log(this.name + ' is a BaseObject : ' + (this instanceof BaseObject));
};
}
function Derivation1(){
BaseObject.apply(this, ['first derivation']);
}
function Derivation2(){
BaseObject.apply(this, ['second derivation']);
}
var first = new Derivation1();
var second = new Derivation2();
first.sayWhoAmI(); 记录此:
first derivation is a Derivation1 : true
first derivation is a Derivation2 : false
first derivation is a BaseObject : false
second.sayWhoAmI(); 记录此:
second derivation is a Derivation1 : false
second derivation is a Derivation2 : true
second derivation is a BaseObject : false
我觉得first 和second 对象都应该说它们是BaseObject 的实例。
我知道 JavaScript 可能不是为此而开发的,但我想知道是否有办法实现这一点。
【问题讨论】:
-
只调用
Base.apply(...)不会设置继承。您必须正确设置原型。请参阅:jsfiddle.net/fkling/wJE6s。也看看这个问题的解释:stackoverflow.com/questions/3145700/… -
Felix 你应该把这个写成答案,这正是我所需要的,你的小提琴简单地展示了它。不要让别人窃取你的声誉!
-
同意他应该添加一个答案,但他可能并不担心将他的声望提高 0.01%!
-
太晚了,我太累了,无法提供完整的答案,对不起。现在添加一个,我希望它可以理解。如果有任何不清楚的地方,请随时发表评论。
标签: javascript oop polymorphism