gpt4 book ai didi

javascript - 创建 Javascript 对象的新实例

转载 作者:行者123 更新时间:2023-12-03 11:28:21 25 4
gpt4 key购买 nike

我创建了一个 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();

但是,如果我尝试 varfather = newparent() 我得到 parent() is not a constructor如果我尝试 varfather = new Object() 我得到 father.initialize is not a function.

最佳答案

你所拥有的(如果你删除function后面的))将导致parent引用一个对象,而不是一个函数。您可以通过将其设为函数来解决此问题:

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

那(工厂函数)是在 JavaScript 中创建对象的常见习惯用法之一。

请注意,我还删除了其中一些不正确的 this.:您的 name 是一个变量,而不是一个属性。当然,你可以将其设为属性(property);这是一个 namedata 都是属性的版本:

function createParent(){
return{
name: null,
data: [],
initialize: function(){
alert('Hi i am a Parent');
},
setName: function (aName){
this.name = aName;
},
getName: function(){
return this.name;
},

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 来调用该函数新对象。

如果您想使用构造函数,您可以使 namedata 属性获得重用函数的好处,而不是为每个 Parent 实例构建函数的新副本:

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

关于javascript - 创建 Javascript 对象的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com