Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建Javascript对象的新实例_Javascript_Class_Instantiation - Fatal编程技术网

创建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');

我创建了一个JavaScript对象,每次用户调用该对象时,我都要实例化一个新对象。然而,我不确定如何正确地做到这一点。以下是我尝试过的:

JavaScript对象

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