在Coffeescript中,我可以在创建对象之后调用该对象的构造函数吗?

在Coffeescript中,我可以在创建对象之后调用该对象的构造函数吗?,coffeescript,Coffeescript,在Coffeescript中,我可以在创建对象之后调用该对象的构造函数吗?像这样: class Snake constructor: (@name) -> obj = new Snake() // do stuff obj.constructor("Python") 此代码编译为: var Snake, obj; Snake = (function() { function Snake(name) { this.name = name; } return S

在Coffeescript中,我可以在创建对象之后调用该对象的构造函数吗?像这样:

class Snake
  constructor: (@name) ->

obj = new Snake()
// do stuff
obj.constructor("Python")

此代码编译为:

var Snake, obj;

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

  return Snake;
})();

obj = new Snake();
因此没有
constructor()
方法,coffeescript只是使用它来生成
Snake()
函数


所以不,你不能。但是,如果您的代码是面向对象的,为什么要这样做呢?

此代码编译为:

var Snake, obj;

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

  return Snake;
})();

obj = new Snake();
因此没有
constructor()
方法,coffeescript只是使用它来生成
Snake()
函数


所以不,你不能。但是,如果代码是面向对象的,为什么要这样做呢?

是的,可以。CoffeeScript类语法只是JavaScript构造函数的语法糖,这些函数只是您可以调用的普通函数:

class Example
  count: 0
  constructor: (@name) -> 
    @count += 1

e = new Example 'foo'
console.log e.count # -> 1
console.log e.name  # -> foo

# Call contructor again over the same instance:
Example.call e, 'bar'
console.log e.count # -> 2
console.log e.name  # -> bar

# If you don't have the constructor in a variable:
e.constructor.call e, 'baz'
console.log e.count # -> 3
console.log e.name  # -> baz

是的,你可以。CoffeeScript类语法只是JavaScript构造函数的语法糖,这些函数只是您可以调用的普通函数:

class Example
  count: 0
  constructor: (@name) -> 
    @count += 1

e = new Example 'foo'
console.log e.count # -> 1
console.log e.name  # -> foo

# Call contructor again over the same instance:
Example.call e, 'bar'
console.log e.count # -> 2
console.log e.name  # -> bar

# If you don't have the constructor in a variable:
e.constructor.call e, 'baz'
console.log e.count # -> 3
console.log e.name  # -> baz

为什么需要这样做?公平地说,避免在依赖代码中修改/重构构造函数调用有点麻烦。“//do stuff”设置通常由Snake的子类设置的变量。是的,您可以这样做,没有问题。为什么需要这样做?公平地说,避免在依赖代码中修改/重构构造函数调用有点麻烦。“//do stuff”设置通常由Snake的子类设置的变量。是的,您可以这样做,没有问题。