带有对象的JavaScript构造函数

带有对象的JavaScript构造函数,javascript,object-literal,Javascript,Object Literal,我已经开始尝试学习如何更广泛地使用JavaScript对象,并尝试用JavaScript编写一个对象,允许我在初始化时设置一些构造函数参数 我要说的是,JavaScript中有很多不同的'',我可能把自己和语法之类的东西搞混了。通过研究,我发现了各种StackOverflow文章,如: 我想用我的对象在初始化点设置一些内部/私有变量,如下所示: <script> var TestObj = new Dispatch( 100 ); console.log( TestO

我已经开始尝试学习如何更广泛地使用JavaScript对象,并尝试用JavaScript编写一个对象,允许我在初始化时设置一些构造函数参数

我要说的是,JavaScript中有很多不同的'',我可能把自己和语法之类的东西搞混了。通过研究,我发现了各种StackOverflow文章,如:

  • 我想用我的对象在初始化点设置一些内部/私有变量,如下所示:

    <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