Javascript基本继承与Crockford原型继承
我对Crockford推荐的继承感到困惑,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
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");