我发现这是在 javascript 中进行继承的最推荐方式。
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
}
如果我已经在 child 的原型(prototype)中有方法,他们会不会被覆盖,我们不应该保留它们吗?
function extend(Child, Parent) {
var c = child.prototype;
var oldProto = new C();
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
for(var i in oldProto ){
Child.prototype[i] = oldProto[i]
}
}
最佳答案
我不确定这对您是否有好处,但请务必记住:原型(prototype)与类不同。你所做的是试图让 JS 表现得像传统的 OO 语言,这是试图教一只海豚跳芭蕾舞,或者强制一只老虎成为素食主义者:令人钦佩,但注定要以泪水收场。
我真的不明白你为什么要使用 extend
函数来做你想做的任何事情。为什么不简单地使用这个:
function Parent()
{};
function Child()
{};
//augment parent proto
Parent.prototype.parentMethod1 = function()
{};
//set Child's proto to Parent
Child.prototype = new Parent();
Child.prototype.constructor = Child;
//Then augment the Child's prototype
Child.prototype.childMethod1 = function()
{};
var foo = new Child();
foo.parentMethod1();//works
foo.childMethod1();//works, too
IMO,这完全解决了问题。当然,它有点冗长,但 OOP 总是如此。
关于javascript继承模式混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12950456/