带有对象的JavaScript构造函数
我已经开始尝试学习如何更广泛地使用JavaScript对象,并尝试用JavaScript编写一个对象,允许我在初始化时设置一些构造函数参数 我要说的是,JavaScript中有很多不同的'',我可能把自己和语法之类的东西搞混了。通过研究,我发现了各种StackOverflow文章,如: 我想用我的对象在初始化点设置一些内部/私有变量,如下所示:带有对象的JavaScript构造函数,javascript,object-literal,Javascript,Object Literal,我已经开始尝试学习如何更广泛地使用JavaScript对象,并尝试用JavaScript编写一个对象,允许我在初始化时设置一些构造函数参数 我要说的是,JavaScript中有很多不同的'',我可能把自己和语法之类的东西搞混了。通过研究,我发现了各种StackOverflow文章,如: 我想用我的对象在初始化点设置一些内部/私有变量,如下所示: <script> var TestObj = new Dispatch( 100 ); console.log( TestO
<script>
var TestObj = new Dispatch( 100 );
console.log( TestObj.getConstructorValue() );
//Would Return 100.
</script>
JavaScript
/**
*
**/
var调度=函数(Arg1){
var订单号;
var检验;
var setOrderNumber=函数(orderNum){
this.OrderNumber=orderNum;
};
this.constructor=函数(str){
这个。Test=str;
};
这个构造函数(Arg1);
返回{
/**
*OrderNumber的Getter
**/
getOrderNumber:函数(){
返回此.OrderNumber;
},
/**
*订单号设置器
**/
setOrderNumber:setOrderNumber,
/**
*测试用吸气剂
**/
getTest:function(){
返回此。测试;
}
};
};
我的尝试(1)
我已尝试直接设置它:
<script>
var Dispatch = function( s ) {
/**
* Assign constructor
* to Test
**/
var Test = s;
return {
getTest : function() {
return this.Test;
}
}
};
TestObj.getTest(); //Returns undefined
</script>
var调度=功能{
/**
*赋值构造函数
*检验
**/
var检验=s;
返回{
getTest:function(){
返回此。测试;
}
}
};
TestObj.getTest()//返回未定义的
我的尝试(2)
我还尝试通过稍微混合函数return来访问变量:
<script>
var Dispatch = function( s ) {
var Test;
var getTestVar = function() {
return this.Test;
}
this.constructor = function( str ) {
this.Test = str;
};
/**
*
**/
this.constructor( s );
return {
getTest : getTestVar
};
};
TestObj.getTest(); //Returns undefined
</script>
var调度=功能{
var检验;
var getTestVar=function(){
返回此。测试;
}
this.constructor=函数(str){
这个。Test=str;
};
/**
*
**/
本条为建造商;
返回{
getTest:getTestVar
};
};
TestObj.getTest()//返回未定义的
我也曾玩弄过其他方法,不过,如果能书面理解为什么我的构造函数不能正常工作,那就太好了
下面是一个例子,展示了这一切的实际情况。很抱歉发了这么长的帖子&我对JavaScript对象一无所知 您确实混淆了许多概念。
这就是您正在寻找的:
var Dispatch = function( s ) {
/**
* Assign constructor
* to Test
**/
this.Test = s;
this.getTest = function() {
return this.Test;
}
};
因此:
TestObj = new Dispatch(7);
将导致对象:
Dispatch {Test: 7, getTest: function}
以及:
我7点回来
您可以在此处查看有关构造函数的更多正确信息:您可以使用此模式
function myObject (param1) {
var myPrivateMemberValue1 = param1;
return {
getPrivateMemberValue1: function() {
return myPrivateMemberValue1;
}
};
}
console.log(new myObject("thefourtheye"));
console.log(new myObject("thefourtheye").getPrivateMemberValue1());
输出
{ getPrivateMemberValue1: [Function] }
thefourtheye
说明:
我们在这里使用闭包。将参数传递给构造函数时,它存储在局部变量中。然后,我们返回一个带有getPrivateMemberValue1
函数的对象,由于闭包,该对象仍然可以访问该变量,该变量是函数的局部变量。所以你可以像这样把变量私有化
function Dispatch(s) {
var test = s;
this.returnTest = function () {
return test;
}
}
var no = new Dispatch(5);
no.returnTest(); // 5
无法直接访问测试变量,因为它不是新创建对象的成员,但您可以在闭包中访问它。使用var声明的变量是构造函数的变量,您无法使用此变量访问它们,因为此变量指向使用new调用构造函数构造的对象。您可以通过闭包访问它们。另一件事-如果您返回显式定义的对象,则没有与构造函数原型的链接。我只是想说谢谢您提供了一个很好的答案和解释,我的原始代码似乎是bbldoron提供的这个和一个的混合。虽然他的时间稍微早了一点,而且我希望继续使用这种模式,但再次感谢你=)非常感谢你为我澄清这一点=)是的,在阅读了几篇关于JavaScript函数/对象构造的文章之后,我不会撒谎-它是多样的。
function myObject (param1) {
var myPrivateMemberValue1 = param1;
return {
getPrivateMemberValue1: function() {
return myPrivateMemberValue1;
}
};
}
console.log(new myObject("thefourtheye"));
console.log(new myObject("thefourtheye").getPrivateMemberValue1());
{ getPrivateMemberValue1: [Function] }
thefourtheye
function Dispatch(s) {
var test = s;
this.returnTest = function () {
return test;
}
}
var no = new Dispatch(5);
no.returnTest(); // 5