这与 window 之间的区别
Difference between this and window
假设 coffeescript class :
class Batman
constructor: ->
alert "Batman is awesome"
我认为这是一个菜鸟问题,但两者之间的真正区别是什么:
class @Batman
constructor: ->
alert "Batman is awesome"
和
class window.Batman
constructor: ->
alert "Batman is awesome"
使用“-c”参数编译您的 coffeescript,看看您得到什么:
(function() {
/// Your code here
}).call(this);
那 this
存在被调用的函数包装器的上下文,并成为您的 coffeescript 模块中的 this
对象。
在浏览器的上下文中,您的模块使用全局 this = window
;在 Node 或 IoJS 的上下文中,this = global
,执行的全局上下文;在 plv8 的上下文中,this = role
,一个包含安全信息的每次执行对象(因为 plv8 基本上是 SQL 服务器内的节点 运行,拥有这一点很重要)。
class window.Batman
明确地将你的蝙蝠侠 class 附加到一个 window 对象(这意味着你不再拥有可以随处使用的同构代码); class @Batman
将其附加到本地上下文,可以是您想要的任何内容。
总而言之,作为最佳实践,将内容附加到 VM 提供的上下文(如浏览器、您的节点实例、您的数据库)通常不是一个好主意,你应该找到一个更好的方法来实例化你的代码并将它从一个模块传递到另一个模块。
假设 coffeescript class :
class Batman
constructor: ->
alert "Batman is awesome"
我认为这是一个菜鸟问题,但两者之间的真正区别是什么:
class @Batman
constructor: ->
alert "Batman is awesome"
和
class window.Batman
constructor: ->
alert "Batman is awesome"
使用“-c”参数编译您的 coffeescript,看看您得到什么:
(function() {
/// Your code here
}).call(this);
那 this
存在被调用的函数包装器的上下文,并成为您的 coffeescript 模块中的 this
对象。
在浏览器的上下文中,您的模块使用全局 this = window
;在 Node 或 IoJS 的上下文中,this = global
,执行的全局上下文;在 plv8 的上下文中,this = role
,一个包含安全信息的每次执行对象(因为 plv8 基本上是 SQL 服务器内的节点 运行,拥有这一点很重要)。
class window.Batman
明确地将你的蝙蝠侠 class 附加到一个 window 对象(这意味着你不再拥有可以随处使用的同构代码); class @Batman
将其附加到本地上下文,可以是您想要的任何内容。
总而言之,作为最佳实践,将内容附加到 VM 提供的上下文(如浏览器、您的节点实例、您的数据库)通常不是一个好主意,你应该找到一个更好的方法来实例化你的代码并将它从一个模块传递到另一个模块。