2

変数とメソッドを持つ関数があれば、サブ関数が変数を参照できるようになると思いました。たぶん私はそれを間違ってやっていて、このようなものを適切に形成する方法についていくつかのアドバイスが欲しいです。

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ループはタイマー内に設定されているため、10ミリ秒ごとにチェックを続ける準備ができているかどうかをチェックします。

最終編集: callback()での戻りを忘れたため、常に起動しなかったため、終了として認識されませんでした。。_

4

5 に答える 5

3

別の方法は、自己完結型モジュールを作成することです。

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

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

JavaScriptデザインパターンに関する優れたドキュメントについては、http: //addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascriptをご覧ください。

于 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

私はあなたが割り当てることができると言うでしょう

var me = this;

次に、コードでme.x、me.yなどを使用できます。

于 2012-09-26T20:51:58.700 に答える