gpt4 book ai didi

javascript - 了解 Javascript 中的经典继承

转载 作者:行者123 更新时间:2023-11-30 12:33:39 24 4
gpt4 key购买 nike

我不完全明白它是如何工作的:

function inherit(C,P) {
var F = function () {};
F.prototype = P.prototype;
C.prototype = new F();
}

function Parent(){};
Parent.prototype.species = "human";
function Child(){};
inherit(Child, Parent);
var kid = new Child();
Parent.prototype.talk = function () {return "Hello there!"};

kid对象怎么有talk功能的?在您调用继承函数时,继承函数不是只给子“类”父类的原型(prototype)吗?它如何能够更新它?

最佳答案

inherit 函数执行此操作:

function inherit(C, P) {
var F = function () {}; // Defines a new constructor function.
F.prototype = P.prototype; // Sets `F.prototype` to *be an alias* of `P.prototype`
C.prototype = new F(); // Sets `C.prototype` to *be an instance* of `F`
}

如果您通过Child更改C,通过ParentF更改P通过匿名类。它将呈现如下内容:

Child.prototype匿名类的实例,与Parent共享相同的原型(prototype)。

这使得这个陈述为真:Child.prototype.__proto__ === Parent.prototype

因此,您对Parent.prototype 所做的任何更改都会被Child.prototype 中的匿名类 实例看到。因此,这也使得 Child 实例也可以访问它。

但是,反之则不然!例如,如果您向 Child.prototype 添加属性,您只是更改了 anonymous class 的实例,它对 Parent< 的实例不可见.

关于javascript - 了解 Javascript 中的经典继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823408/

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