尝试OO Javascript但似乎继承变量并不像我习惯的那样工作吗?

时间:2012-09-26 20:24:10

标签: javascript jquery function

我在想,拥有一个带变量和方法的函数可以让子函数引用变量。也许我做错了,并想就如何正确地填充这些东西提出一些建议。

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

我如何正确地联系X?

修改

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

它不调用更多callback()的原因是因为它在while循环中。因为它与X值有关,所以很好,很花哨。似乎在某一点之后,它退出while循环的范围并等待.always()被触发,这样它就可以恢复while循环。 while循环设置在计时器内,因此它每隔10ms检查一次是否准备继续查看。

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

5 个答案:

答案 0 :(得分:3)

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

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

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

您可以在http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

上浏览有关JavaScript设计模式的精彩文档

答案 1 :(得分:2)

尝试类似

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

答案 2 :(得分:1)

试试这个:

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

取自Prototypal Inheritance:http://javascript.crockford.com/prototypal.html

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

var newObj = createObject(SomeObj);

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

答案 3 :(得分: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

答案 4 :(得分:0)

我会说你可以分配

var me = this;

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