2

我在想拥有一个带有变量和方法的函数将能够允许子函数引用变量。也许我做错了,并且想要一些关于如何正确格式化这些东西的建议。

function somefunction(callback) {
    var x,y,z;
    var timervar = setInterval(function() {
        //...
        callback().always(function() {
            x++;
        });
        //...
    }, 1);
}

我将如何正确关联 X?

编辑:

我正在一个while循环中进行一些迭代。x,y,z 是存储计数器信息的变量。当回调完成执行时,我或多或少地增加或减少变量。

它不调用更多回调()的原因是因为它处于while循环中。WHich 很好,很漂亮,因为它与 X 值有关。似乎在某个点之后,它退出了 while 循环的范围并等待 .always() 被触发,以便它能够恢复 while 循环。while 循环在计时器内设置,因此它每 10 毫秒检查一次是否准备好继续查找。

最终编辑: 总是没有触发,因为我忘记了回调()中的返回,所以它从未被识别为已完成。. _ .

4

5 回答 5

3

另一种方法是制作自包含模块:

somefunction = (function() {
    var x,y,z;

    return {
        callback: function(){
            return x++;
        }
    }
});

您可以在http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript上探索有关 JavaScript 设计模式的精彩文档

于 2012-09-26T20:58:47.310 回答
2

尝试类似的东西

var SomeObj = {
  x: 0,
  myFunc : function(){
     SomeObj.x++;
  }
}
于 2012-09-26T20:33:06.700 回答
1

尝试这个:

function createObject(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

取自原型继承:http: //javascript.crockford.com/prototypal.html

var SomeObj = {
  x: 0,
  myFunc : function(){
     SomeObj.x++;
  }
}

var newObj = createObject(SomeObj);

也许这篇文章会有所帮助?https://stackoverflow.com/a/3075818/566012

于 2012-09-26T22:34:54.750 回答
0

我在JS中使用了以下继承实现

/**
* inheritance
* 
* @author Kevin Lindsey
* @version 1.0
* 
* copyright 2006, Kevin Lindsey
* 
*/

// namespace placeholder
TWE = {};

/**
* A function used to extend one class with another
* 
* @param {Object} subClass
*       The inheriting class, or subclass
* @param {Object} baseClass
*       The class from which to inherit
*/
TWE.extend = function(subClass, baseClass) {
    function inheritance() { }
    inheritance.prototype = baseClass.prototype;

    subClass.prototype = new inheritance();
    subClass.prototype.constructor = subClass;
    subClass.baseConstructor = baseClass;
    subClass.superClass = baseClass.prototype;
}

然后你可以做类似的事情:

function myBaseClass() {
this._datamember1 = ....;
//more data members
}

function mySubClass() {
 mySubClass.baseConstructor.call(this);   

//list additional data members here
}

TWE.extend(mySubClass, myBaseClass);

在此处查看更多信息 http://www.kevlindev.com/tutorials/javascript/inheritance/index.htm

于 2012-09-26T20:34:46.043 回答
0

我会说你可以分配

变我=这个;

然后在您的代码中,您可以使用 me.x、me.y 等。

于 2012-09-26T20:51:58.700 回答