这是非常基本的。我尝试实例化嵌入的外部.js文件中定义的类。 .js的代码就是这个。
(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>
如果我尝试在控制台上实例化该类,但我看到了ReferenceError: MyClass is not defined
:
var myVar
myVar = new MyClass
> ReferenceError: MyClass is not defined
如果我尝试直接从控制台调用MyClass
,我会收到同样的错误
> ReferenceError: MyClass is not defined
我确信我在这里遗漏了一些可怕的东西,但我能弄清楚是什么。
已更新:要创建编码的javascript我正在使用CoffeScript,代码就是这样。
class MyClass
acc: (name) ->
建议的答案代码在使用http://js2coffee.org渲染转换回CoffeScript时转换为不同的代码,但仍然无效。想知道如果有一个CoffeScript提示将MyClass从本地范围弹出到外部范围。
答案 0 :(得分:5)
我的类在闭包中定义。而你想要做的是通过将其设置为窗口对象将其“弹出”到外部范围:
(function() {
var myClass = ...
window.myClass = myClass;
}).call( this );
更新:您似乎想在CoffeeScript中使用它。你走了:
(->
myClass = (->
myClass = ->
myClass::name = (name) ->
myClass
)()
window.myClass = myClass
).call this
<强> JSBin Demo 强>
答案 1 :(得分:2)
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);
在上面的代码中,您只是使用window
上下文调用匿名函数,并将值设置为MyClass
窗口的属性(使MyClass
全局)。
另一种解决方案(我认为更不清楚)是:
(function() {
window.MyClass = (function() {
function MyClass() {}
MyClass.prototype.name = function(name) {};
return MyClass;
})();
}).call(this);
唯一的区别是你明确地说窗口的属性MyClass
将等于函数执行的结果。
你的CoffeeScript可能类似于:
MyClass = undefined
(->
MyClass = (->
MyClass = ->
MyClass::name = (name) ->
MyClass
)()
).call this