Javascript基本继承与Crockford原型继承

Javascript基本继承与Crockford原型继承,javascript,inheritance,Javascript,Inheritance,我对Crockford推荐的继承感到困惑,Crockford方法和泛型(默认)方法之间的主要区别是什么 下面是更通用的方法 function Base(name) { this.name = name; } Base.prototype.getName = function () { return 'Base :' + this.name; } function Child(name) { this.name = name; } Child.prototype.ge

我对Crockford推荐的继承感到困惑,Crockford方法和泛型(默认)方法之间的主要区别是什么

下面是更通用的方法

function Base(name) {
    this.name = name;
}

Base.prototype.getName = function () {
    return 'Base :' + this.name;
}

function Child(name) {
    this.name = name;
}

Child.prototype.getName = function () {
    return 'Child :' + this.name;
}

function Kid(name) {
    this.name = name;
}

Kid.prototype.getName = function () {
    return 'Kid :' + this.name;
}

Child.prototype = new Base ("childBase");
Kid.prototype = new Child ("kidChild");

var base = new Base ("myBase");
var child = new Child("myChild");
var kid = new Kid("myKid");

console.log(base.getName());
console.log(child.getName());
console.log(kid.getName());
以上两者有什么区别?

实际上,我不能完全理解Crockford方法。谁能帮我找出一般方法的缺点和Crockford方法的优点

Child.prototype = new Base ("childBase");
Kid.prototype = new Child ("K1", "K2");
使用这些行可以实例化两个对象,它们甚至有自己的名称。那有什么用?在更复杂的环境中,这甚至可能会破坏应用程序-当
Base
构造函数使用私有变量和特权方法时,其所有子级将在同一实例中共享相同的变量


因此,一般不应使用这种方式,而应使用Crockfords函数,即旧版本的。它将用
Base.prototype
调用,创建一个直接从这个对象继承的新对象-它只设置prototype链,但不执行任何构造函数代码。将帮助您了解详细信息。然后,创建的对象完美地成为子对象的原型对象。也请阅读。

您是否确实查看了输出?这不应该是您所期望的,因为您已经为原型分配了函数(
getName
)。看看@EliasVanOotegem:我想说一个构造函数(与
new
关键字一起使用)确实创建了继承链…@Bergi,一切都是这样,实际上除了Crockford的(相当陈旧)函数还允许您使用对象文本创建巨大的继承链。因此不再需要
新的
关键字了
Child.prototype = new Base ("childBase");
Kid.prototype = new Child ("K1", "K2");