为什么咖啡脚本创建此闭包

Why is coffescript creating this closure

本文关键字:闭包 创建 脚本 咖啡 为什么      更新时间:2023-09-26

我正在学习CoffeeScript,我有这段代码:

class Person
    constructor: (@firstName, @lastName) ->
    sayHi: () ->
        return "Hi, I'm #{@firstName} #{@lastName}"

并且正在生成以下JavaScript代码:

// Generated by CoffeeScript 1.10.0
(function() {
  var Person;
  Person = (function() {
    function Person(firstName, lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
    }
    Person.prototype.sayHi = function() {
      return "Hi, I'm " + this.firstName + " " + this.lastName;
    };
    return Person;
  })();
}).call(this);

我想创建该class的实例,但由于它在闭包内,我不能怎么做?

一个稍微不那么黑客的选项是@运算符(与this相同)。在浏览器环境中,this会指向window,在node.js中,它会指向exports

class @Person
  constructor: (@firstName, @lastName) ->
  sayHi: () ->
    return "Hi, I'm #{@firstName} #{@lastName}"

window.Person仅适用于浏览器,@将适用于节点和浏览器。请参阅 https://stackoverflow.com/a/24352630/227299

或者,您可以使用 -b (--bare) 选项运行 coffescript,并且不会创建包装函数。

更改类的位声明

class window.Person
  constructor: (@firstName, @lastName) ->
  sayHi: () ->
    return "Hi, I'm #{@firstName} #{@lastName}"