Inheritance 以class-Extend.js样式扩展自定义对象

Inheritance 以class-Extend.js样式扩展自定义对象,inheritance,javascript,Inheritance,Javascript,我在JS代码中使用实现简单继承: var Man = Class.extend({ init: function(name) { this.name = name; } }); var Mr = Man.extend({ init: function(name) { this._super("Mr. " + name); } }); var mrBean = new Mr("Bean"); 我应该如何修改脚本以从未使用cla

我在JS代码中使用实现简单继承:

var Man = Class.extend({
    init: function(name) {
        this.name = name;
    }
});

var Mr = Man.extend({
    init: function(name) {
        this._super("Mr. " + name);
    }
});

var mrBean = new Mr("Bean");

我应该如何修改脚本以从未使用class-extend.js实现的对象进行继承

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

...
?

以下内容将实现您的目标:()。它使用原型链来实现经典继承

函数AnotherMan(名称){
this.name=名称;
}
功能Mr(姓名){
call(this,name);//在此范围内调用超类的构造函数。
this.name=“Mr.”+name;//为Author添加属性。
}
Mr.prototype=新AnotherMan();//建立原型链。
Mr.prototype.constructor=Mr;//将构造函数属性设置为Mr。
var mrBean=新的Mr(“Bean”);
您可以将其概括为一个函数:()

然后像这样使用它:

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

function Mr(name) {
    Mr.superclass.constructor.call(this, name);
    this.name = "Mr. " + name;
}
extend(Mr, AnotherMan);

var mrBean = new Mr("Bean");
您可以在
extend
功能上使用。这需要
init
prototype方法指向构造函数:

function AnotherMan(name) {
    this.name = name;
}
AnotherMan.prototype.init = AnotherMan; // = AnotherMan.prototype.constructor;

var Mr = Class.extend.call(AnotherMan, {
    init: function(name) {
        this._super("Mr. " + name);
    }
});
var mrBean = new Mr("Bean");
()

当然,使用本机而不是
库可能更容易

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

function Mr(name) {
    AnotherMan.call(this, "Mr. " + name);
}
Mr.prototype = Object.create(AnotherMan.prototype, {
    constructor: {value: AnotherMan}
});

var mrBean = new Mr("Bean");

什么是
类extend.js
?请添加到库文档的链接。@Bergi,它的代码包含在我的JSFIDLE中。库是你自己写的吗?如果不是的话,一个源属性就好了。看起来很像不确定我从哪里拿的。Post“SimpleJavaScript继承”似乎是所有类似脚本的源代码。我在这里发现了相同的脚本:它是对John Resig的简单JavaScript继承库的翻版:谢谢你,Yotam,这是一个经典的方法,但它不允许我使用class-extend.js的常规语法(我的所有项目都已经使用了)。谢谢,Bergi,这是我需要的。将在8小时内颁发赏金。
function AnotherMan(name) {
    this.name = name;
}

function Mr(name) {
    AnotherMan.call(this, "Mr. " + name);
}
Mr.prototype = Object.create(AnotherMan.prototype, {
    constructor: {value: AnotherMan}
});

var mrBean = new Mr("Bean");