gpt4 book ai didi

javascript - 为什么这个对象的原型(prototype)链中多了一个原型(prototype)?

转载 作者:行者123 更新时间:2023-11-30 17:40:19 29 4
gpt4 key购买 nike

我编写了一个名为 protoDepth 的函数来计算对象原型(prototype)链的深度:

function protoDepth(obj) {                                                                                                                                                                   
var depth = 0
, proto
while (proto = Object.getPrototypeOf(obj)) {
obj = proto
depth++
}
return depth
}

然后我为这个功能写了一个测试,居然失败了:

describe('`protoDepth`:', function() {                                                                                                                                                
function A() {}
function B() {}
var a, b

beforeEach(function() {
a = new A
B.prototype = a
b = new B
})

it('provides the correct prototype depth.', function() {
expect(protoDepth(b)).toBe(2)
})
})

我希望深度为 2;也就是说,我认为 depth++ 只会执行两次:

  • 深度0
  • b的原型(prototype)是a;深度为 1
  • a的原型(prototype)是Object;深度为 2
  • Object的原型(prototype)是null;故事结束。

但这是错误的。看起来a的原型(prototype)是a。这是第一行执行的本地范围:

enter image description here

enter image description here

这是怎么回事?为什么 A 是 a 的 __proto__?因为我没有设置A.prototype,所以默认不是Object吗?

最佳答案

Since I didn't set A.prototype, isn't it Object by default?

不,默认情况下它是一个空对象(与函数A一起创建)。所以你的b原型(prototype)链是a(== B.prototype),然后是A.prototype,然后Object.prototype,然后是 null

关于javascript - 为什么这个对象的原型(prototype)链中多了一个原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219698/

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