gpt4 book ai didi

JavaScript 原型(prototype)函数没有覆盖原来的函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:24:14 24 4
gpt4 key购买 nike

当我接触原型(prototype)的概念时学习 javascript。我成功地向 cat 类添加了新方法,但未能覆盖原始的 talk 方法。

function cat(name) {
this.name = name;
this.talk = function() {
alert( this.name + " : I'm a girl!" )
}
}

cat.prototype.talk = function() {
alert( this.name + " : I'm a dude!" )
}

cat1 = new cat("felix")
cat1.talk()

为什么这不提醒新文本?

最佳答案

‘function cat’只是一个函数。它的原型(prototype)是一个空对象 ({})。可以调用“new cat”将成员“name”和“talk”添加到新对象。在新对象的下方是函数原型(prototype),它仍然是 {}。

var c= new cat('Tiddles');

c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}

现在,当您写入“cat.prototype.talk”时,您是在向该底层对象添加成员:

c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }

直接在实例“c”上设置的“talk”函数优先于在 c 的构造函数原型(prototype)上间接设置的“talk”。

所以你在这里混合了两种继承方式,“this”分配方法和“原型(prototype)”方法。

将方法写入原型(prototype)的优点是您不会将相同成员的冗余副本复制到每个对象实例中;写入实例的优点是它解决了绑定(bind)方法的问题。您选择哪一个取决于您,但不要将两者混用。如果您想走原型(prototype)路线,则只应将“名称”写入“this”,因为这是每个实例特定的唯一属性。

关于JavaScript 原型(prototype)函数没有覆盖原来的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751704/

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