JavaScript 原型(prototype)分配

标签 javascript

分配对象原型(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/

相关文章:

javascript - 非法 break 语句 (Node.js)

javascript - 使用 JQuery 进行内联页面编辑(就地编辑)时如何维护安全性

javascript - html 多文件选择和队列(添加/删除)

javascript - 将三个选择菜单中的元素切入或切出数组

javascript - 使用 jQuery 处理这些数据的正确方法是什么?

javascript - 如何创建带有边框和背景属性的三 Angular 形 div?

javascript - 使用 Base64 图像数据 URI 作为 POST 的输入

javascript - 如何创建 JSF 过滤器/url 模式来保护 javascript

javascript - 基于单选按钮的Jquery函数是选择

javascript - 如何使用 javascript 扩展/放大 CKEditor 中的文本选择?