创建Javascript对象的新实例
我创建了一个JavaScript对象,每次用户调用该对象时,我都要实例化一个新对象。然而,我不确定如何正确地做到这一点。以下是我尝试过的: JavaScript对象创建Javascript对象的新实例,javascript,class,instantiation,Javascript,Class,Instantiation,我创建了一个JavaScript对象,每次用户调用该对象时,我都要实例化一个新对象。然而,我不确定如何正确地做到这一点。以下是我尝试过的: JavaScript对象 var parent = (function (){ var name = null; var data = []; return{ initialize: function(){ alert('Hi i am a Parent');
var parent = (function (){
var name = null;
var data = [];
return{
initialize: function(){
alert('Hi i am a Parent');
},
setName: function (aName){
this.name = aName;
},
getName: function(){
return this.name;
},
sayHello:function(name){
alert('Hi good morning ' + name);
}
};
})();
我想创建这个对象的一个新实例并调用它的函数
这可以工作parent.initialize()代码>
但是,如果我尝试var-father=new-parent()
我得到的父(
)不是构造函数
如果我尝试var father=new Object()
我得到的是father。initialize
不是一个函数。你所拥有的(如果你移除)
之后的函数将导致父对象引用一个对象,而不是函数。您只需将其设置为函数即可解决此问题:
function createParent(){
var name = null;
var data = [];
return{
initialize: function(){
alert('Hi i am a Parent');
},
setName: function (aName){
name = aName; // <== No `this.` here
},
getName: function(){
return name; // <== Or here
},
sayHello:function(name){
alert('Hi goof morning ' + name);
}
};
}
var parent1 = createParent(); // Create a parent
var parent2 = createParent(); // Create another parent
parent1.initialize(); // Call initialize on parent1
parent2.initialize(); // Call initialize on parent1
另一个常见的习惯用法是构造函数,它的形式稍有不同,总是通过new
调用,而不是直接调用:
function Parent(){
var name = null;
var data = [];
this.initialize = function(){
alert('Hi i am a Parent');
};
this.setName = function (aName){
name = aName;
};
this.getName = function(){
return name;
};
this.sayHello = function(name){
alert('Hi goof morning ' + name);
};
}
var parent1 = new Parent(); // Create a parent
var parent2 = new Parent(); // Create another parent
parent1.initialize(); // Call initialize on parent1
parent2.initialize(); // Call initialize on parent1
对于构造函数(通常以大写字母开始命名),new
操作符为您创建对象,然后使用引用该新对象的this
调用函数
如果要使用构造函数,可以创建name
和data
属性,并获得重用函数的好处,而不是为每个父实例构建函数的新副本:
function Parent(){
this.name = null;
this.data = [];
}
Parent.prototype.initialize = function(){
alert('Hi i am a Parent');
};
Parent.prototype.setName = function (aName){
this.name = aName;
};
Parent.prototype.getName = function(){
return this.name;
};
Parent.prototype.sayHello = function(name){
alert('Hi goof morning ' + name);
};
var parent1 = new Parent(); // Create a parent
var parent2 = new Parent(); // Create another parent
parent1.initialize(); // Call initialize on parent1
parent2.initialize(); // Call initialize on parent1
在函数
之后有一个)
过多(函数)
是一个语法错误。请发布可执行代码。devdar:您为什么要将代码放入IIFE中?如果我只想调用initialize函数,我会执行createParent()。initialize吗?@devdar:您为什么只想调用initialize
?创建一个对象,调用该对象上的函数,然后立即释放它是没有任何意义的。最好让函数是独立的。对象函数的不同部分在不同的时间被调用,但我需要将其全部包含在一个对象而不是函数中。您是否可以告诉我如何分别从父对象(例如Parent.initialize())调用initialize、setName、getName和sayHello,Parent.setName(),Parent.getName()…@devdar:您只需调用结果对象上的函数:var Parent=createParent();初始化()代码>我已经添加了上面的调用。
function Parent(){
this.name = null;
this.data = [];
}
Parent.prototype.initialize = function(){
alert('Hi i am a Parent');
};
Parent.prototype.setName = function (aName){
this.name = aName;
};
Parent.prototype.getName = function(){
return this.name;
};
Parent.prototype.sayHello = function(name){
alert('Hi goof morning ' + name);
};
var parent1 = new Parent(); // Create a parent
var parent2 = new Parent(); // Create another parent
parent1.initialize(); // Call initialize on parent1
parent2.initialize(); // Call initialize on parent1