我正在尝试在javascript上创建类似体系结构的类,但仍然坚持一个观点。 这是代码:
var make = function(args) {
var priv = args.priv,
cons = args.cons,
pub = args.pub;
return function(consParams) {
var priv = priv,
cons = args.cons;
cons.prototype.constructor = cons;
cons.prototype = $.extend({}, pub);
if (!$.isFunction(cons)) {
throw new Hata(100001);
}
return new cons(consParams);
}
};
我正在尝试在返回的函数对象的范围和cons.prototype的对象范围上添加priv变量,但我无法做到;
以下是make对象的用法:
var myClass = make({
cons: function() {
alert(this.acik);
alert(priv.gizli);
},
pub: {
acik: 'acik'
},
priv: {
gizli: 'gizli'
}
})
myObj = myClass();
PS:我使用外部变量只是为了证明我想做什么。我知道javascript函数结构的私有变量语法。但我需要一个解决方案来改变(添加私有变量)一个函数的范围,该函数将被“新”(我忘记模式名称)实例化模式使用。
PS:请原谅我的英文......
答案 0 :(得分:0)
如果您尝试复制类似结构的类,则Javascript中的常用方法如下:
//Constructor
function MyClass(myParam){
this.myParam = myParam
}
MyClass.prototype.myMethod = function(){
alert(this.myParam); //retreives the "class" instance variable myParam
}
//Instantiation
var firstMyClass = new MyClass(7);
firstMyClass.myMethod(); //alerts 7
请注意,在您添加到原型的函数中,这将是对MyClass实例的引用。如果您想创建私有变量,可以从Javascript Expert Douglas Crockford查看此链接:http://javascript.crockford.com/private.html
答案 1 :(得分:0)
如果您在课程结构之后,您应该遵循以下模式:
function MyClass(arg){};
重要说明:当您将内部闭包的var名称设置为与包含外部闭包的名称相同时,您将无法再访问具有相同名称的原始外部闭包变量。
另一方面,如果需要访问外部闭包变量,则无需使用相同名称设置内部闭包变量。只需使用变量,就好像它们在内部闭合中一样。
var make = function(args) {
var priv = args.priv,
cons = args.cons,
pub = args.pub;
return function(consParams) {
var someThing = priv,
sElse = args.cons;
}
};
// 如果你需要将一个var或private变量添加到一个名为cons的函数对象中:正如你在下面得到的那样,只需像任何其他函数对象一样添加它。
var myClass = make({
cons: function() {
var myPrivateVariable = 'private';
alert(this.acik);
alert(priv.gizli);
},
pub: {
acik: 'acik'
},
priv: {
gizli: 'gizli'
}
})
myObj = myClass();