gpt4 book ai didi

javascript - 封装 Javascript 和定义私有(private)变量/方法的首选方式?

转载 作者:行者123 更新时间:2023-11-30 12:57:02 25 4
gpt4 key购买 nike

所以之前我一直使用这种封装Javascript的方法:

Classtype = (function (){
//private members

var variable1;
var variable2;

//

//public methods
return {
SetVariable1: function(pvariable){
variable1 = pvariable;
},

GetVariable1: function(){
return variable1;
}

};
})();

$(document).ready(function(){

Classtype.SetVariable1('var');
var t = Classtype.GetVariable1();
alert(t);
});

但是今天在我的 Javascript 课上,老师教了我们以下内容:

function Cname(pvariable1, pvariable2)
{
//private members//
var variable1 = pvariable1;
var variable2 = pvariable2;

//Getter

this.Getvariable1=function() {
return variable1;
}
}

$(document).ready(function(){
var cname = new Cname('test1', 'test2');
var r = cname.Getvariable1();
alert(r);
});

由于我是 Javascript 的新手,我想知道哪种声明类/封装我的代码的方式是首选方式,为什么?

最佳答案

Preferred way of defining private variables/methods?

只有一种方法,并且在您的两个代码段中都是相同的。您有一个函数范围,其中声明了变量,并且在调用函数时设置了它们的值。在该范围内创建的任何函数都可以访问它们,即使这些函数是从外部调用的(当它们从范围中导出时,例如通过在对象上返回它们)。

What is the difference then?

主要有两个方面:

  • 你的第一个模式是immediately invoke the function并使用公共(public)方法初始化您的对象 - 创建一个“单例”。这称为揭示模块模式。第二个只定义(创建)一个可以多次使用的函数,以实例化许多具有相似形状的对象。此处的调用(使用 ())在您的 dom 就绪处理程序中。
  • 虽然第一个模式确实产生了一个简单、普通的对象,但第二个模式是一个构造函数 函数。当使用 new keyword 调用时,它将创建一个对象,该对象继承 Cname.prototype 对象的属性。你还没有在上面创建任何属性,所以除了 constructor 属性之外它是空的: cname.constructor == Object.getPrototypOf(cname).constructor == Cname.prototype.constructor = = Cname.您很快就会在类(class)中了解这种原型(prototype)继承:-)

关于javascript - 封装 Javascript 和定义私有(private)变量/方法的首选方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708218/

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