Внутри функции click
в createShape
контекст устанавливается на this.personShape.node
.this
больше не относится к вашему person
, поэтому его необходимо кэшировать.Попробуйте это:
createShape: function() {
var context = this;
context.personShape = paper.rect(40,40,40,40).attr({"fill":"blue"});
$(context.personShape.node).click(function() {
alert(context.personName);
});
}
Кроме того, ваши функции не должны иметь скобок в вашем определении класса / объекта.Кроме того, по нескольким причинам рекомендуется начать ставить фигурные скобки в одну строку с выражением.Вот мой рефакторинг:
var person = new Class({
initialize: function(name) {
this.personName = name;
alert(this.personName) //WORKS :-)
this.testFunc(); //WORKS :-)
this.createShape();
},
testFunc: function() {
alert(this.personName);
},
createShape: function() {
var context = this;
context.personShape = paper.rect(40,40,40,40).attr({"fill":"blue"});
$(context.personShape.node).click(function() {
alert(context.personName);
});
}
});