gpt4 book ai didi

javascript - 无法读取未定义的属性 'prototype'; CoffeeScript 与 Require.js 的继承

转载 作者:行者123 更新时间:2023-11-28 20:06:40 24 4
gpt4 key购买 nike

我正在使用 Require.js 和 CoffeeScript。我发现了一个相当奇怪的错误。

我有以下定义:

define ->
{
Node: class

ChildNode: class extends @Node

Term: class

ChildTerm: class extends @Term

}

这会引发以下错误:

Uncaught TypeError: Cannot read property 'prototype' of undefined 

但是,以下两者都可以正常工作:

define ->
{
Node: class

ChildNode: class extends @Node

}



define ->
{
Node: class

ChildNode: class extends @Node

Term: class

ChildTerm: class extends @Node

}

我的代码有什么问题导致我无法延长 Term?我看不出它和 Node 之间有什么不同。

最佳答案

However, the following both work fine

事实上他们没有。看看他们正在生成什么代码:

// [simplified, obviously]
function __extends(child, parent) {
child.prototype = Object.create(parent.prototype);
return child; // ^^^^^^^^^^^^^^^^
}
define(function() {
return {
Node: function _Class() {},
ChildNode: __extends(function _Class() {}, this.Node)
} // ^^^^^^^^^
})

您不能拥有 Self-references in object literal declarations .

So why does subclassing Term like this throw an error while with Node it does not?

因为this确实指的是全局对象。实际上已经有一个 Node 属性: DOM Node interface构造函数(不过你 cannot subclass )。但是,使用 Term 时,您会将 undefined 传递给 __extend()

关于javascript - 无法读取未定义的属性 'prototype'; CoffeeScript 与 Require.js 的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705886/

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