在Node.js應用程序中從服務器端JavaScript切換到CoffeeScript後,我遇到了一個問題。讓我們看看下面的代碼:在使用CoffeeScript時使用util.inherits()「打破」原型設計
# require our tools
util = require "util"
events = require "events"
# define an object class and a method using CoffeeScript syntax
class TestObject
method:() -> #1
console.log "Test"
# set up inheritance using Node.js util module
util.inherits TestObject, events.EventEmitter #2
# make an instance of object
instance = new TestObject()
# and boom! it crashes ;(
instance.method()
上面的代碼會崩潰,因爲錯誤的:TypeError: Object #<TestObject> has no method 'method'
錯誤是由在#2
建立繼承引起的。上面的代碼編譯爲以下JavaScript(刪除了可讀性的緣故一些新行):
(function() {
var TestObject, events, instance, util;
util = require("util");
events = require("events");
TestObject = (function() {
function TestObject() {}
TestObject.prototype.method = function() {
return console.log("Test");
};
return TestObject;
})();
util.inherits(TestObject, events.EventEmitter);
instance = new TestObject();
instance.method();
}).call(this);
你可以看到util.inherits()
方法也加入到原型方法之後調用。所以,切換原型後該方法會丟失。
有沒有一種優雅的方式來設置繼承而不破壞真棒CoffeeScript類表示法?
媽的,它有時真的很有趣,當你意識到你已經忘記了最簡單,最優雅的方式。謝謝。 – Przemek 2012-03-29 10:12:18
我在CoffeeScript中編寫了一個IRC bot,純粹是爲了好玩,並在過程中學習新東西,所以不要擔心;)。 – Przemek 2012-03-29 10:17:01
「在CoffeeScript中編寫開源庫的人應該被拍攝。」 – jergason 2013-03-12 19:14:05