分配对象原型(prototype)的推荐方法/模式是什么?分配对已实例化的“super”function
实例的引用或初始化“”的新实例super' 对于每个'sub'函数
?如果多种方法很常见;各自的优缺点是什么?
function SuperFoo(){ };
function Foo() {};
function Fooy() {};
function Fooimus() {};
function Foolacious() {};
/* Option 1: */
var proto = new SuperFoo();
Foo.prototype = proto;
Fooy.prototype = proto;
Fooimus.prototype = proto;
Foolacious.prototype = proto;
/* Option 2: */
Foo.prototype = new SuperFoo();
Fooy.prototype = new SuperFoo();
Fooimus.prototype = new SuperFoo();
Foolacious.prototype = new SuperFoo();
最佳答案
多种方法很常见。但一般来说,您列出的任何解决方案实际上都没有涵盖人们真正想要做的事情。
您通常希望从子类获得一个构造函数,其 prototype
属性是一个对象,该对象本身继承自父类(super class)构造函数的 prototype
属性。 确保原型(prototype)构造函数正确匹配也是一个好主意:原型(prototype)应该有一个指向其自己的类构造函数的 constructor
属性。结果可能如下所示:
function SuperFoo() {}; // assuming that some prototype functions are already defined.
function Foo() {};
Foo.prototype = Object.create(SuperFoo.prototype);
Foo.prototype.constructor = Foo;
现在我通常的解决方案是将这个 rigamarole 包装到一个函数中,如下所示:
Object.subclass = function (sub, sup) {
sub.prototype = Object.create(sup.prototype);
sub.prototype.constructor = sub;
};
function SuperFoo() {}; // assuming that some prototype functions are already defined.
function Foo() {};
Object.subclass(Foo, SuperFoo);
function Fooy() {};
Object.subclass(Fooy, SuperFoo);
function Fooimus() {};
Object.subclass(Fooimus, SuperFoo);
function Foolacious() {};
Object.subclass(Fooalicious, SuperFoo);
关于JavaScript 原型(prototype)分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548614/