gpt4 book ai didi

javascript - JavaScript 的 Object.prototype 行为是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:19:23 26 4
gpt4 key购买 nike

我遇到了一段奇怪的代码,我根本看不懂,这里是:

var obj = function() {};
obj.prototype.x = 5;

var instance1 = new obj();

obj.prototype = {y: 6};

var instance2 = new obj();

console.log(instance1.x, instance1.y, instance2.x, instance2.y);
// 5, undefined, undefined, 6

现在,问题是:

  1. 为什么此日志记录 5, undefined, undefined, 6 而不是 undefined, 6, undefined, 6
  2. 为什么替换原型(prototype)并没有像通常那样更改对象所有实例的原型(prototype)?
  3. V8 引擎在这段代码中一步一步地做了什么?
  4. 编辑:我将如何更改所有实例的原型(prototype)?

感谢每一个解释。

最佳答案

解释

首先,您的两行代码创建了一个函数 obj,并将其赋值给它的原型(prototype) {x: 5}

当您创建该对象的一个​​实例时,它似乎有一个对原型(prototype)的内部引用,该原型(prototype)在新建时就已存在。

在此之后,您将原型(prototype)重新分配给 {y: 6},这不会影响对第一个原型(prototype)的 instance1 内部引用。

然后当您创建 instance2 时,它有一个对第二个原型(prototype)的内部引用,因此,记录它们将产生 5, undefined, undefined, 6

#4

你可以,而不是将原型(prototype)重新分配给一个新对象:

obj.prototype = {y: 6};

改为修改原型(prototype):

delete obj.prototype.x; // Setting to undefined should produce same behaviour
obj.prototype.y = 6;

这将产生输出:undefined, 6, undefined, 6

我用 http://jsfiddle.net/9j3260gp/ 测试过这个Windows 上的 Chrome 和 Firefox 最新版本。

关于javascript - JavaScript 的 Object.prototype 行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324395/

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