gpt4 book ai didi

javascript - 为什么我不能覆盖类(函数)描述中的方法定义?

转载 作者:行者123 更新时间:2023-11-27 23:51:25 26 4
gpt4 key购买 nike

我不太明白,为什么我在第一个日志消息中收到 Prototype: [object Object],而在第二个日志消息中却收到 Prototype: New Plant

function Plant() {
this.toString = function() {
return "Plant";
}
}

function Fruit(name) {
Plant.call(this);
this.name = name;
this.toString = function() {
return "Fruit";
}
}
Fruit.prototype = Object.create(Plant.prototype);
var apple = new Fruit("apple");

console.log("Prototype: " + Object.getPrototypeOf(apple));
Plant.prototype.toString = function() {
return "New Plant";
}
console.log("Prototype: " + Object.getPrototypeOf(apple));

我想既然我在 Plant 类中定义了 toString() 方法,那么所有 Fruit 实例也会有这个方法吗?

最佳答案

所有 Fruit 实例都可以访问 Plant 原型(prototype)上的 .toString() 方法。但是,该方法会被 Fruit 构造函数中的直接赋值覆盖。一旦 Fruit 构造函数向 this.toString 分配了一些内容,它就会始终隐藏原型(prototype)链中的 .toString()

请记住,在 Fruit 构造函数的代码中,this 指的是新创建的实例。因此,对 this 属性的赋值是将直接存在于每个实例上的属性。

在像x.toString()这样的任何表达式中,名称为“toString”的属性的搜索从对象本身开始。如果在那里找到它,则根本不会咨询原型(prototype)链。

现在,关于为什么您的 console.log() 语句打印它们所做的事情的另一个问题,请注意,第一次调用发生在之前 你在 Plant 原型(prototype)上放置了一个 .toString() 方法。完成此操作后,调用 console.log() 中的 + 表达式中发生的从对象到字符串的转换将隐式调用该函数来转换原型(prototype)对象到字符串。

关于javascript - 为什么我不能覆盖类(函数)描述中的方法定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674648/

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