javascript - 在对象实例化期间扩展 javascript 对象

标签 javascript class object inheritance prototype

我有一个 javascript 类库,它们使用 John Resig 的简单 Javascript 继承库相互继承 ( http://ejohn.org/blog/simple-javascript-inheritance/ ) 我的一个类(我们称之为parent)有许多子类(parent.child1parent.child2等),它们扩展了类并添加自己的方法。 通常,我会通过

实例化一个子对象
ob=new parent.child1(ops)

但是,当我实例化一个 parent 对象时,创建选项哈希可以包含一个名为 type 的成员,它告诉我该对象实际上必须是一个 子对象。

ob= new parent({type:"child1"});

在对象创建过程中,如何确保创建的对象是parent.child1的实例?如果这是不可能的,我如何确保创建的对象至少具有 parent.child1.prototype 的所有方法和属性?

提前致谢

编辑:一个更好的例子是有一个名为 employee 的类,然后有两个继承自 employee 的类,名为 employee.engineer 和 < em>employee.admin

最佳答案

function Parent(options) {
    if(options.type) return new Parent[options.type]();
}
Parent.prototype.foo = 'foo';
Parent.Child = function() {
    this.bar = 'bar';
};
Parent.Child.prototype = Object.create(Parent.prototype);
Parent.Child.prototype.constructor = Parent.Child;

var obj = new Parent({type:"Child"});
obj instanceof Parent;       // true
obj instanceof Parent.Child; // true
obj.constructor;             // Parent.Child
obj.foo;                     // 'foo'
obj.bar;                     // 'bar';

关于javascript - 在对象实例化期间扩展 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27392669/

相关文章:

javascript - 对数组中的对象进行操作

javascript - 如何避免回调链?

javascript - 为什么 browser.wait 即使等待时间为 0 也能工作?

javascript - javascript中循环的关闭错误

c# - 结构是存储一组值的好选择吗?

c++ - 有没有办法用父类的命名空间/类空间来引用子类?

Javascript es6类处理错误

list - 如何创建输出列表(而不是表)的对象

javascript - 映射键以发出函数

javascript - WebAssembly 中的 .NET CLR