在Javascript中这是'ok'练习吗?

时间:2011-04-01 11:37:41

标签: javascript

我在JavaScript中有一个包装器函数,它为嵌入在网页中的.Net控件提供了一些有用的方法。 为了享受intellisense的好处,我想在每次使用包装器时重新包装控件。 (如果我将其包装一次并将其设置为全局变量,则下次在另一个函数中使用它时会丢失智能感知 - 至少在Visual Studio 2008中会失败:

function onLoad() {
    var control = new Wrapper(form1.button1);
    control.SetColor("Red");
    // etc.
}

function onButton_Clicked() {
    var control = new Wrapper(form1.button1);
    control.SetBackColor("Blue");
    // etc.
}

因此,为了避免每次为同一个控件重新创建包装器,我首先检查它是否已经创建,如果是,则返回该实例。下面是伪JavaScript代码:

function Wrapper(control) {

    var i = Wrapper.Controls.IndexOf(control);
    if (i >-1) { return Wrapper.Wrappers[i] };

    // Init stuff

    Wrapper.Controls.Push(control);
    Wrapper.Wrappers.Push(this);

}

Wrapper.prototype.SetColor = function(color) {}
Wrapper.prototype.SetBackColor = function(color) {}
...

Wrapper.Controls = new Array();
Wrapper.Wrappers = new Array();

如果可以做我正在做的事情?有没有办法制作静态变量,Wrapper.Controls& Wrapper.Wrappers,私有?

1 个答案:

答案 0 :(得分:0)

而不是与.NET控件的交互。 (不知道AFWebControl是什么)我建议你与DOM交互。

您可以使用DOM操作库或原始js。

document.getElementById(id).style.color = ...;

$("#id").css("color", ...)

等待。这是服务器端的JavaScript使用ASP吗?如果是的话,请将其标记为服务器端。

要真正回答你的问题:

var cachedfunction = (function() {
    var cache = {};

    return function(arg) {
        return cache[arg] || (cache[arg] = expensivefunction(arg));
    }

}());

这里我们创建一个带有本地缓存​​变量的动态函数。该函数要么从缓存中返回对象,要么在缓存中设置对象(通过昂贵的调用)然后返回它。