Coffeescript 为什么这个咖啡脚本会出现以下错误 返回错误 TypeError:对象函数(){ 返回console.log(this.name); }没有方法“sayName” 反对。(/Users/aero/Downloads/m.coffee:11:17) 反对。(/Users/aero/Downloads/m.coffee:1:1) 在模块处编译(Module.js:456:26)

Coffeescript 为什么这个咖啡脚本会出现以下错误 返回错误 TypeError:对象函数(){ 返回console.log(this.name); }没有方法“sayName” 反对。(/Users/aero/Downloads/m.coffee:11:17) 反对。(/Users/aero/Downloads/m.coffee:1:1) 在模块处编译(Module.js:456:26),coffeescript,Coffeescript,您的类定义不太正确。也就是说,您需要一个构造函数,并且需要使用:s,而不是像常规js那样使用=s 改为这样做: TypeError: Object function () { return console.log(this.name); } has no method 'sayName' at Object.<anonymous> (/Users/aero/Downloads/m.coffee:11:17) at Object.<anonymous&

您的类定义不太正确。也就是说,您需要一个构造函数,并且需要使用
s,而不是像常规js那样使用
=
s

改为这样做:

TypeError: Object function () {
      return console.log(this.name);
    } has no method 'sayName'
  at Object.<anonymous> (/Users/aero/Downloads/m.coffee:11:17)
  at Object.<anonymous> (/Users/aero/Downloads/m.coffee:1:1)
  at Module._compile (module.js:456:26)
用小提琴演示:


这里有一个很棒的关于咖啡脚本的课程,来自于咖啡脚本的小书,供你参考

我建议创建类时使用agconti answer,但这里我想回答出现此错误的原因

使用javascript编写构造函数时: 变量
someone
被分配给
new关键字的返回对象

但如果构造函数返回一个函数:

function Person(name) {
  this.name = name;
}

var someone = new Person('someone');
不幸的是,没有获得新创建的对象,而是将某人
分配给构造函数返回的函数

如果我们查看您的咖啡的编译代码: 我们看到构造函数返回一个函数。这是因为coffescript总是返回函数的最后一个表达式

您可以通过不返回任何内容来修复它:
啊,谢谢。我把这个直接从javascript翻译过来,作为学习coffeescript的一种方式。没问题!一个尝试的好地方是主coffeescript网站上的浏览器内解释器。感谢您提供详细的答案。
class Person
  constructor: (@name, @age, @job) ->

  sayName: ->
    console.log(@name)

kim = new Person("Kimothy Lozado", 37, "Skip Tracer")


console.log kim.sayName()
function Person(name) {
  this.name = name;
}

var someone = new Person('someone');
function Person(name) {
  this.name = name;
  return function(){};
}

var someone = new Person('someone');
Person = function(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
  return this.sayName = function() {
    return console.log(this.name);
  };
};
Person = (name, age, job) ->
  @name = name
  @age = age
  @job = job
  @sayName = ->
    console.log(@name)
  return