Javascript:ReferenceError:MyClass未定义
这是非常基本的。我尝试实例化一个在嵌入的外部.js文件中定义的类。js的代码就是这样Javascript:ReferenceError:MyClass未定义,javascript,coffeescript,Javascript,Coffeescript,这是非常基本的。我尝试实例化一个在嵌入的外部.js文件中定义的类。js的代码就是这样 (function() { var MyClass; MyClass = (function() { function MyClass() {} MyClass.prototype.name = function(name) {}; return MyClass; })(); }).call(this); HTML就是这样 <!DOCTYPE html&g
(function() {
var MyClass;
MyClass = (function() {
function MyClass() {}
MyClass.prototype.name = function(name) {};
return MyClass;
})();
}).call(this);
HTML就是这样
<!DOCTYPE html>
<html>
<head>
<title>Sample Page</title>
<script src="file.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>
如果我试图直接从控制台调用MyClass
,我会得到相同的错误
> ReferenceError: MyClass is not defined
我肯定我错过了一些非常明显的东西,但我能弄清楚是什么
更新:要创建我正在使用的CoffeScript编码的javascript,代码如下所示
class MyClass
acc: (name) ->
当使用render将代码转换回CoffeScript时,建议的答案是代码,但它仍然不起作用。不知道CoffeScript上是否有将MyClass从本地作用域弹出到外部作用域的提示。
MyClass
定义在自调用函数的本地作用域中。您可以尝试在自调用函数之外初始化MyClass
:
var MyClass;
(function() {
MyClass = (function() {
function MyClass() {}
MyClass.prototype.name = function(name) {};
return MyClass;
})();
}).call(this);
你可以做的另一件事是:
(function() {
this.MyClass = (function() {
function MyClass() {}
MyClass.prototype.name = function(name) {};
return MyClass;
})();
}).call(window);
在上面的代码中,您只需使用窗口
上下文调用匿名函数,并将值设置为MyClass
窗口的属性(这使MyClass
全局)
另一个解决方案(我认为更不清楚)是:
唯一的区别是,您明确表示window的属性MyClass
将等于函数执行的结果
你的咖啡脚本可能是这样的:
MyClass = undefined
(->
MyClass = (->
MyClass = ->
MyClass::name = (name) ->
MyClass
)()
).call this
我的类是在闭包中定义的。相反,您要做的是通过将其设置为窗口对象将其“弹出”到外部范围:
(function() {
var myClass = ...
window.myClass = myClass;
}).call( this );
更新:似乎您希望在CoffeeScript中使用它。给你:
(->
myClass = (->
myClass = ->
myClass::name = (name) ->
myClass
)()
window.myClass = myClass
).call this
@Martin那么你是说你想要同样的东西,只是在Coffescript中?你提出的解决方案在转换为Coffescript时不知怎么坏了。想知道CoffeScript上是否有一个特定的方法用于此。除此之外,它仍然不起作用(最终呈现出不同的代码)。@Martin我不熟悉CoffeeScript,我不知道。虽然我使用了你引用的网站并输入了代码。它似乎没有做错什么。看这里--我已经发布了一个咖啡脚本示例
(function() {
var myClass = ...
window.myClass = myClass;
}).call( this );
(->
myClass = (->
myClass = ->
myClass::name = (name) ->
myClass
)()
window.myClass = myClass
).call this