ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptオブジェクトチェーンオペレーションコード(jquery)_jsオブジェクト指向

JavaScriptオブジェクトチェーンオペレーションコード(jquery)_jsオブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 18:23:541283ブラウズ

現在は jQuery の使用を徐々に減らしていますが (プロジェクトではまだ使用していますが、その方が効率的です。日常生活では基本的に使用しません)、jQuery への依存度を減らしていきたいと思っています。
しかし、この連鎖操作方法は非常に魅力的です (現在、多くの新しいライブラリが連鎖操作を使用しているようです)。
初心者でも大丈夫なので、以下のコードを書きました。重要なのは、将来忘れないようにすることです(笑)。

コードをコピー コードは次のとおりです。

window.k = function() {
return new k.fn.init(arguments);
}
k.fn = k.prototype = {
init:function() {
this.length = 0; //var args = Array.prototype.slice.call(arguments,0);
Array.prototype.push.apply(this,arguments[0]);
return this; >show: function() {
console.log(Array.prototype.slice.call(this,0).join("$"));
これを返します;
:function( ) {
console.log(this);
これを返します;
}
}
k.fn.init.prototype = k.fn; (k( "0",1,2,3,4,5).show().hide());


これは単なるチェーン操作です。しかし、firbug では、jQuery オブジェクトが配列/クラス配列を返すことがわかります。これを達成したいのですが、どうすればよいかわかりません。 。
k.fn.prototype = new Array() にすることはできません。 jQueryのソースコードを見るのは本当に疲れます。 。
以下はネチズンへの返信です
実際、チェーン操作は非常に単純です。つまり、操作オブジェクト自体を毎回返すので、オブジェクト自体によって定義されたすべてのメソッドを継続的に呼び出すことができます。

最も単純な例:



コードをコピーします
コードは次のとおりです: var o = function() { /**何かをしてください
*/
これを返す;
}
o.prototype = {
action1: function() {
/**
何かをしてください
*/
これを返す;
},
action2: function() {
/**
何かをしてください
*/
これを返す; >}
}



次のように呼び出すことができます:

new o() //
.action1() //
。 action2(); / /操作の各ステップはインスタンス化された o オブジェクトを返します
これは実際には次と同等です: var a = new o();//これが返されない場合、呼び出しは実行できませんここで続けました。何が返されるかは未定義であるためです。
a.action1(); //現時点では、a (インスタンス化された o オブジェクトへの参照) のみを操作できます。
a.action2();
jQuery を使用したことがある場合は、それを知っているはずです。 jQuery では、オブジェクトをインスタンス化するために new を使用する必要がないため、new を使用すると便利です。
そこで、上記の o オブジェクトをカプセル化する別のオブジェクトを定義します。
var k = function() {
return new o();
}
次のように呼び出すことができます。 :
k().action1().action2();

JS を構築するには「関数化」と呼ばれる方法をお勧めします。




コードをコピー
コードは次のとおりです: //強調のため太字 //このメソッドは、「JavaScript 言語の本質」の 52 ページの「5.4 関数化」からのものです。 varconstructor = function (spec,my){ var that、他のプライベートインスタンス変数;
my = my ||
my
that =新しいオブジェクト
それに特権メソッドを追加します
それを返します
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。