Проблема в том, что myNamespace.Item
не является функцией, это объект, потому что у вас есть функция, которая выполняется немедленно.
Например, вы можете добавить методы к текущему объекту:
myNamespace.Item = function() {
this.initialize = function(title,details,code) {
// setting members of this Object
this.title = title;
this.details = details;
this.code = code;
};
this.display = function() {
this.Position();
this.Show();
};
this.position = function() {
// position my item in the DOM
};
this.show = function() {
// show my item in the DOM
}
};
Или используйте свойство prototype
функции конструктора, чтобы экземпляры объектов, созданные с помощью оператора new
, наследовали эти методы:
// Object for my namesapce
myNamespace.Item = function() {
// constructor logic
};
myNamespace.Item.prototype.initialize = function(title,details,code) {
// setting members of this Object
this.title = title;
this.details = details;
this.code = code;
};
myNamespace.Item.prototype.display = function() {
this.Position();
this.Show();
};
myNamespace.Item.prototype.position = function() {
// position my item in the DOM
};
myNamespace.Item.prototype.show = function() {
// show my item in the DOM
};
Или немного более короткий синтаксис:
myNamespace.Item = function() { };
myNamespace.Item.prototype = {
initialize: function(title,details,code) {
// setting members of this Object
this.title = title;
this.details = details;
this.code = code;
},
display: function() {
this.Position();
this.Show();
},
position: function() {
// position my item in the DOM
},
show: function() {
// show my item in the DOM
},
constructor: myNamespace.Item // fix the constructor property
};
Преимущество использования свойства prototype
состоит в том, что методы существуют только в объекте myNamespace.Item.prototype
, в то время как в первом примере каждый объект будет иметь свои собственные экземпляры функций, которые менее эффективны для памяти.