__proto__ 我使用的是 IE8

__proto__ in IE8 using ko

我正在寻找一种安全的方法来使现有函数成为 instanceof 另一个函数。

我在这里看到 IE8 不支持 __proto__:

听说knockout js支持IE8:http://knockoutjs.com/documentation/browser-support.html

我使用 __proto__ 找到了敲除:https://github.com/knockout/knockout/blob/241c26ca82e6e4b3eaee39e3dc0a92f85bc1df0c/src/utils.js#L21

knockout 使用 __proto__ 怎么能在 IE8 上运行?

How can it be that knockout uses __proto__ and yet works on IE8?

因为它会检测 运行 所在的浏览器是否支持 __proto__,并且仅在支持时使用它。

在您链接到的那行之后几行,您会发现:

var canSetPrototype = ({ __proto__: [] } instanceof Array);

...在定义对象时进一步向下:

setPrototypeOfOrExtend: canSetPrototype ? setPrototypeOf : extend,

然后KO根据是否支持__proto__使用setPrototypeOfOrExtend