gpt4 book ai didi

javascript - 通过函数继承?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:13 24 4
gpt4 key购买 nike

我正在学习 Javascript 中的 OOP 基础知识,并遇到了一个与我通常看到的不同的继承示例。

典型的:

ChildClass.prototype = new ParentClass();

替代方法:

function clone(object) {
function OneShotConstructor(){}
OneShotConstructor.prototype = object;
return new OneShotConstructor();
}

SecondClass.prototype = clone(FirstClass.prototype);

为什么在创建原型(prototype)是另一个对象的对象时会首选后者?

最佳答案

因为您将调用您尝试继承的自定义类型(又名类)的构造函数。这可能会产生副作用。想象一下:

var instancesOfParentClass = 0;
function ParentClass (options) {
instancesOfParentClass++;
this.options = options;
}

function ChildClass () {}
ChildClass.prototype = new ParentClass();

您的计数器已递增,但您并没有真正创建一个有用的 ParentClass 实例。

另一个问题是,所有实例属性(参见 this.options)都将出现在 ChildClass 的原型(prototype)上,而您可能不希望这样。

注意:使用构造函数时,您可能拥有实例 属性和共享 属性。例如:

function Email (subject, body) {
// instance properties
this.subject = subject;
this.body = body;
}

Email.prototype.send = function () {
// do some AJAX to send email
};

// create instances of Email
emailBob = new Email("Sup? Bob", "Bob, you are awesome!");
emailJohn = new Email("Where's my money?", "John, you owe me one billion dollars!");

// each of the objects (instances of Email) has its own subject
emailBob.subject // "Sup? Bob"
emailJohn.subject // "Where's my money?"

// but the method `send` is shared across instances
emailBob.send === emailJohn.send // true

关于javascript - 通过函数继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571351/

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