0

次のjavascriptクラス/インスタンス化/メソッド呼び出しがあります:

var myClass = function(a){
    var myElement = a,
        myMethod = function(){
            alert(myElement.html());
        }

    return {
        myMethod: myMethod
    }
}

var myObj = new myClass($('#elementA'));
myObj.myMethod();

そして私のマークアップ:

<div id="elementA">This is the text in elementA</div>

これがフィドルです。

このクラスをドット構文でインスタンス化する方法はありますか? 理想的には、次のようになりますmyObj.myClass()。jquery が新しいウィジェットをインスタンス化する方法と同じです ($().tabs();頭に浮かぶ)。オブジェクトを再構築する必要がありますか? もしそうなら、どのように?

この仕組みの一部を誤解していると推測できる場合は、お気軽に訂正してください。助けてくれてありがとう!

4

2 に答える 2

1

これは私がこのようなことをする方法です:

var myObj = {

    myMethod: function(elem) {

        alert($(elem).html()); //do your alert
        return this; //return the object for chanining

    },

    myOtherMethod: function() {

        alert("This is something other method");
        return this;    

    }

}

myObj.myMethod("#elementA").myOtherMethod();

これがフィドルです:http://jsfiddle.net/LqvXg/

var好きな名前で 新しいオブジェクトを作成するだけです。

を使用するnew場合は、おそらくコンストラクターと一緒に使用する必要があります。Object.create()プロトタイプを使用して渡すこともできます。

メソッドでオブジェクトを返すのは、クロージャーを使用していて、変更する必要のある変数があるときだけです...完璧な例は、タイマーのようなものです。

于 2013-05-22T19:10:27.953 に答える
0

New fiddle: http://jsfiddle.net/WybQb/2/

What is wrong with just chaining all of it? Though, if you intend on doing things like this... I'm going to get shot down for suggesting this, but this syntax might be awesome for you:

var myClass = function(a){
    var myElement = a,
       myMethod = function(){
        alert(a.html());
       }

    return {
       myMethod: function() { return new myMethod(); }
   }
}

The only benefit of this is to avoid the new keyword.

于 2013-05-22T19:00:55.970 に答える