gpt4 book ai didi

实例中未显示 Javascript 原型(prototype)更改

转载 作者:行者123 更新时间:2023-11-30 16:41:10 26 4
gpt4 key购买 nike

我只是想通过尝试一些原型(prototype)来了解原型(prototype),但我不确定我是否做对了。在这个例子中,我希望原型(prototype)的新实例是用在原始函数之外定义的更改创建的:

function Peeps (){
this.x = "old"
};
Peeps.prototype.x = "new";

var peep1 = new Peeps();
peep1.x; //still "old"

delete peep1.x;
peep1.x; //now "new"

我知道在最后一行中,x 的新原型(prototype)值“闪现”,因为我删除了对象的 native x(它是“旧的”),所以它会在原型(prototype)链上向上寻找另一个 x。我想我的问题是:为什么 x 对于对象首先是“旧的”?即使原型(prototype)的属性之一之前已更改,代码是否没有超越新对象的原始 Peeps 原型(prototype)函数,但是当它在对象中找不到 native x 时,它会超越原始 Peeps 函数?

我已经通读了这里的其他主题,但我认为我还没有完全理解其中的原因。如果有人能用自己的话来解释,那就太好了。

最佳答案

why was x "old" in the first place for the object? Does the code not look past the original Peeps prototype function for the new object even though one of the prototype's properties got changed before, but when it can't find a native x in the object, it looks beyond the original Peeps function?

没错。原型(prototype)旨在提供与继承在其他语言中为我们提供的功能类似的功能。您可以使用 .prototype 来表达“大多数 Peeps 的行为方式”。但是由于您的“构造函数”函数(通过 new Peeps() 调用)在此特定实例中设置了一个属性,因此该属性将优先于原型(prototype)。

I have read through other topics on here, but I don't think I quite understand the reasoning yet. If someone could explain it in their own words, that would be great.

以下是 an article I wrote 的摘录,这可能会有所帮助:

JavaScript 使用一种特殊的prototype 属性来解决其他语言使用类来解决的问题。请考虑以下事项:

function Person(first, last)
{
this.first = first;
this.last = last;
}
var john = new Person("John", "Doe");
var mary = new Person("Mary", "Deer");
Person.prototype.full = function() {return this.first + " " + this.last;};
alert(john.full());

这里发生了很多事情。

  1. 我们创建了一个函数,它会在调用时为其this对象设置属性。
  2. 我们通过在函数调用之前放置 new 关键字来创建该函数的两个独立实例。这确保 johnmary 引用完全独立的对象,每个对象都有自己的 firstlast 属性。
  3. 我们创建了一个新函数并将其分配给Person 函数的prototype 属性的full 属性。 prototype 属性存在于所有函数中,并允许您定义应存在于从该函数创建的每个对象上的回退属性。
  4. 我们调用 johnfull() 函数。 JavaScript 发现 john 对象实际上并没有 full 函数,所以它寻找 Person.prototype.full()函数并调用它。然而,在那个调用中,this 仍然引用 john 对象。

关于实例中未显示 Javascript 原型(prototype)更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973587/

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