gpt4 book ai didi

JavaScript 原型(prototype)分配

转载 作者:行者123 更新时间:2023-11-29 18:15:38 25 4
gpt4 key购买 nike

分配对象原型(prototype)的推荐方法/模式是什么?分配对已实例化的“super”function实例的引用或初始化“的新实例super' 为每个'sub' function?如果,多种方法是司空见惯的;各自的优缺点是什么?

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com