Javascript 无法从类外部访问我的coffeescript类中的方法
我用咖啡脚本写了这门课: Notification.js.coffeeJavascript 无法从类外部访问我的coffeescript类中的方法,javascript,oop,coffeescript,Javascript,Oop,Coffeescript,我用咖啡脚本写了这门课: Notification.js.coffee class Notification display: -> @dom.show() constructor: (header, messages) -> @render(header, messages) class SharerController post_story: -> # some user action posting something in t
class Notification
display: ->
@dom.show()
constructor: (header, messages) ->
@render(header, messages)
class SharerController
post_story: ->
# some user action posting something in the app
notification = new Notification('Header', ['This story has been posted.', 'You can post more. Would you like to?'])
notification.display()
基本上,render()
函数代码的逻辑是将HTML注入DOM(但隐藏),而display()
方法只显示DOM元素。现在,我有另一个独立于这个类的类,我试图利用上面的类
SharerController.js.coffee
class Notification
display: ->
@dom.show()
constructor: (header, messages) ->
@render(header, messages)
class SharerController
post_story: ->
# some user action posting something in the app
notification = new Notification('Header', ['This story has been posted.', 'You can post more. Would you like to?'])
notification.display()
不幸的是,出于某种原因,我
TypeError:“undefined”不是函数(计算“notification.display()”)
在上面的行中,我执行notification.display()
。如果我在Notification类中编写相同的代码(在该类中,所有内容都被包装到一个IIFE中),那么它的工作原理与预期完全相同。上述文件的加载顺序是:Notification.js,然后是shaerrcontroller.js
我到底错过了什么?你错过了几件事:
共享控制器中的通知
与您在Notification.js.coffee
中定义的通知
不同。我认为你正在学习Chrome的原生功能,而它没有显示方法
通知中没有@dom
,因此如果您试图调用它,显示
调用将失败
通知中没有呈现
方法,因此通知
构造函数将由于@render
调用而失败
通知的样本
代码,那么(2)和(3)并不是真正的问题
CoffeeScript将生成的JavaScript封装在一个自动执行函数中,如下所示:
(function() {
// JavaScript goes here...
}).call(this);
因此,您的通知
在Notification.js.coffee
文件外不可见。您可以通过以下方式使其全局可见:
class window.Notification
#...
或
或者您可以使用自己的名称空间
一旦应用程序的其余部分可以使用
通知
,您就可以实例化自己的通知
,解决其他问题,最后您将对具有显示
方法的对象调用显示
。1,2和3真的不是问题,因为我只包含了代码的一些部分。但我发现名称空间和范围在这里起作用。