Reputation: 3658
class Person
constructor: (@name, @org, @phone, @email) ->
alert "#{name}: #{org} #{phone} #{email}"
__create = (title) ->
p =
name: ""
org: "_organization"
phone: "_phone"
email: "_email"
(p[pr] = "%#{title}#{p[pr]}%" for pr of p)
Person(p.name, p.org, p.phone, p.email)
m = __create "author"
alert m.name
This consistently gives me:
TypeError: Cannot read property 'name' of undefined
However, the compiled JavaScript clearly assigns m
a value:
__create = function(title) {
var p, pr;
p = {
name: "",
org: "_organization",
phone: "_phone",
email: "_email"
};
for (pr in p) {
p[pr] = "%" + title + p[pr] + "%";
}
return Person(p.name, p.org, p.phone, p.email);
};
m = __create("author");
alert(m.name);
What am I missing here?
Upvotes: 0
Views: 34
Reputation: 160261
You need to use the new
operator, e.g.,
__create = (title) ->
p =
name: ""
org: "_organization"
phone: "_phone"
email: "_email"
(p[pr] = "%#{title}#{p[pr]}%" for pr of p)
new Person(p.name, p.org, p.phone, p.email)
http://coffeescript.org/#classes
Upvotes: 3