【问题标题】:Adding scope variable to a constructor将范围变量添加到构造函数
【发布时间】:2012-09-01 09:27:01
【问题描述】:

我正在尝试在 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:请原谅我的英语...

【问题讨论】:

  • 顺便说一句,你的英语没有问题。
  • 好吧,接受这个原谅作为对我未来错误的预原谅 (?) :)

标签: javascript oop prototype


【解决方案1】:

如果你追求类结构,你真的应该遵循以下模式:

function MyClass(arg){};

重要提示:当您将内部闭包的 var 名称设置为与包含外部闭包的名称相同时,您将无法再访问具有相同名称的原始外部闭包 var。

另一方面,如果您需要访问外部闭包变量,则无需将内部闭包变量设置为同名。只需使用 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 或私有变量添加到名为 cons: 的函数对象中,如下所示,只需像添加任何其他函数对象一样添加它。

var myClass = make({
    cons: function() {
         var myPrivateVariable = 'private';
        alert(this.acik);
        alert(priv.gizli);
    },
    pub: {
        acik: 'acik'
    },
    priv: {
        gizli: 'gizli'
    }
})
myObj = myClass();

【讨论】:

  • 好吧,我使用外部变量只是为了演示我想要做什么。我知道javascript函数结构的私有变量语法。但是我需要一个解决方案来更改(添加私有变量)将由“新”(我忘记了模式名称)实例化模式使用的函数的范围。
  • 我知道在学习 javascript 时很难以正确的方式提出问题,因为学习这种语言有多难。话虽如此,我认为您很难正确提出问题,这就是为什么您无法得到正确答案的原因。我最接近您的问题的是,您不能将私有属性变量添加到 JavaScript 中的对象,只能添加公共属性。 1.) myObject.newProperty ='wow';或 myObject['newProperty']='wow';
【解决方案2】:

如果您尝试复制类似结构的类,则 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 专家 Douglas Crockford 的此链接:http://javascript.crockford.com/private.html

【讨论】:

  • 我只需要将 priv 变量添加到 cons 函数对象范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多