За последнюю неделю я пытался узнать как можно больше о наследовании js и наткнулся на простой скрипт наследования js Джона Резига. во время тестирования кода все шло нормально, пока я не попытался перебрать один из моих расширенных объектов. вот код:
var Person = Class.create({
init : function(sex, devStage) {
this.sex = sex;
this.devStage = devStage || "newBorn";
},
Sex : function(val) {
if (val) { this.sex = val }
else { return this.sex; }
},
DevStage : function(val) {
if (val) { this.devStage = val; }
else { return this.devStage; }
}
});
var person = new Person("male");
var Mike = Person.extend({
init : function(sex, devStage, name, age) {
this._super(sex, devStage);
this.name = name;
this.age = age;
},
DevStage : function(val) {
if (val) { this._super(val); }
else { return this._super(); }
},
Name : function(val) {
if (val) { this.name = val; }
else { return this.name; }
},
Age : function(val) {
if (val) { this.age = val; }
else { return this.age; }
}
});
var mike = new Mike("male", "adult", "Mike", 38);
for (var k in mike) {
if (mike.hasOwnProperty(k)) { console.log("mike.hasOwnProperty(k) = " + k); }
} //only "sex", "devStage", "name" and "age" show up as properties in firebug's console
Я ожидал, что свойства функции DevStage, Name и Age существуют на объекте mike, но кажется, что единственные свойства, которые попадают в экземпляры каждого объекта, это те, которые отправляются в функцию init , другие свойства находятся на прототипе объекта и работают нормально, я просто не могу найти их с помощью метода hasOwnProperty. Я прочитал почти все комментарии в блоге Ресига, где опубликован сценарий, но не смог найти ничего, связанного с этой проблемой.
мой вопрос: нормально это или нет? я могу видеть времена, когда это будет проблемой, если делать некоторые проверки свойств между объектами. это похоже на серьезное беспокойство с моей стороны? хотя я не новичок в js, я, конечно, не опытный профессионал, поэтому ЛЮБАЯ обратная связь о моей нынешней ситуации была бы очень признательна.