検索
ホームページウェブフロントエンドjsチュートリアルCookie 操作の JavaScript カプセル化の概要_JavaScript スキル

Javascript にはプライベートおよびパブリックのアクセス権設定のキーワードがありませんが、特定の手法を使用して同じ結果をシミュレートできます。
まず、次のコード行を見てみましょう:
var i = (1, 2, 3)。 , 4 , 5);
変数 i の最終結果は 5 です。
これはカンマ演算子の結果であり、括弧はこのコード行の優先順位を変更することを意味します。それ以外の場合、var i = 1, 2, 3, 4, 5; は識別子が見つからないというエラーを報告します。


var i = (1, 2, 3, 4, function(){ return 5 * 5;});
変数 i の最終結果は、結果 25 を返す関数です。
これは、事前に宣言しなくても任意の型を割り当てることができる Javascript の柔軟性です。次の呼び出し:

i ();
alert( i() );
は 25 を返すメソッド呼び出しを取得します。


変数を続けます。 i は、代入演算子を介して関数の参照を取得します。つまり、等号の右側の括弧の演算後に返された最後の結果への参照は、呼び出しを表示することはできませんが、存在します。変数への参照なしで呼び出された場合はどうなりますか?コードが実行されると、メッセージ ボックスが表示され、25 が表示されます。
表示の便宜上、I 前の例の関数は、
2 組のかっこ () () のポップアップ メッセージ ボックスに変更されました。 ; 最初のペアは、結果が関数である場合、2 番目の括弧のペアによって呼び出しが行われることを示します。つまり、参照のために前の括弧のペアを介して匿名関数への参照が行われます。以下は匿名関数の呼び出しです。
匿名関数の使用方法の詳細については、記事の最後にある参考リンクを参照してください。

クロージャが生成される理由は次のとおりです。スコープが異なるため、子スコープは親スコープの変数を参照し、子スコープに戻ります。ただし、親スコープは実行後に破棄される必要がありますが、子スコープは常に存在し、子スコープへの参照を持っています。
次のコードを見てください




コードをコピーします

関数子(){
var b = 2;
アラート(b);
}
}


親関数parentには子関数が含まれており、子関数には親関数のa変数への参照があります。
実行後に親関数が宣言された子関数を返せるようにしましょう



コードをコピーします
コードは次のとおりです。 : 関数parent() { var a = 1; function child(){
var b = 2;
alert(b);
}
return child;
var t =parent()
t(); 10 行目親関数を実行し、関数内で宣言された子関数を返します。このとき、変数 t には返されたオブジェクト (この時点では実行可能な関数) への参照が保持されており、それを 11 行のコードで呼び出しました。結果はそれぞれ出力 1 と 2 です。
出力 2 はサブ関数本体で変数を宣言したためであり、出力 1 は関数本体で対応する変数 a を定義していないためです。交換が発生しました。親関数内の変数への参照、つまり親スコープ内の変数の参照は完了しています。つまり、変数 a はまだ存在しています。関数は実行されており、対応する参照がないため、直接参照することはできません (親 .a など)。返されたサブ関数の参照を介してのみアクセスできます。
他の変数を宣言した場合はどうなるでしょうか。結果は同じで、サブ関数にアクセスできますが、サブ関数が対応する参照を返さない場合、外部からはまったくアクセスできません。これはクロージャを形成します。 🎜>クロージャでできることは何ですか? 外部の世界に自由に変更されたくない変数がある場合は、



コードをコピー

コードは次のとおりです:


myObj = {} //ウィンドウ オブジェクト (window. myObj)
(function(){
var i = 4;
myObj = { //グローバル変数を参照し、値を代入します
getI : function() { //メソッドを取得, a function i = val;
}
}
})(); //匿名関数の呼び出しも関数ですしたがって、これはサブスコープとして使用され、コード汚染を避けるために実行後に破棄されます
myObj.setI(5); //Success
myObj.setI(101); //Failure
alert( myObj.getI());
alert(myObj.i); //エラー、そのような属性はありません



これまでは、パブリック アクセス権とプライベート アクセス権 (つまり、必要なものを提供し、提供したくないものは提供しない) を実装しただけです。



In ページでは、通常、document.cookie 属性を使用してアクセスします。これに新しい値を割り当てると、Cookie には通常、値 (保存された値)、日付 (時刻) の 5 つの属性があります。 UTC形式で、何を表すのか) 有効期限、ドメイン(ドメイン、Cookie所有者)、パス(サブディレクトリ)
通常の開発では、document.cookie属性だけでアクセスすると非常に面倒になりますが、文字列にのみ文字を割り当てることができ、指定された変数名の値を取得するには、読み取り後に文字列を切り取る必要があるため、document.cookie を読み取ると、有効期限などの情報を除いて、割り当てられたすべての値が返されます。
コードは以下に添付されており、すべて Cookie グローバル オブジェクトにカプセル化されており、いくつかのメソッドが公開されています。
Get: 指定されたすべての Cookie 文字列を元に戻します。 Cookie 文字列を設定します。
Clear: すべての Cookie オブジェクトをクリアします。
Write: オーバーロードされた Cookie を参照します。 : Cookie をクエリします。詳細については、コードを参照してください。







コードをコピーします
コードは次のとおりです:

Cookie = {};
/*
* Date オブジェクトの setTime メソッドは、1970-01-01 からのミリ秒数を設定し、オブジェクトに設定して、それ以降の日付 元のオブジェクトではなくミリ秒数。
* Cookie が期限切れ属性を設定していない場合、または有効期限が現地時間より短い場合、次回の閲覧時に期限切れになります。
* document.cookie オブジェクトは、有効期限などを含まないすべての値を文字列形式で返します。 🎜>var isString = function(v ) {
return typeof v === "string";
}
var isArray = function(v) {
return Object.prototype.toString.apply( v) == "[オブジェクト配列]";
}
var isObject = function(v) {
return v && typeof v == "object";
var isDate = function(v) {
return Object.prototype.toString.apply(v) == "[オブジェクト日付]";
var getTime = function() {
return new Date() .getTime();
}
var trim = function(val) {
return (val || "").replace(/^s |s $/g, ""); }
var tryEval = function (val) {
var Obj, e;
try {
Obj = eval(val)
} catch (e) {
Obj = val ;
}
return Obj;
}
var ObjectToString = function(o) {
var tstr = "{";
if (isArray(o[v] )) {
tstr = v ":" ArrayToString(o[v]) ",";
} else if (isObject(o[v])) {
tstr = v ":" ObjectToString( o[v]) ",";
} else if (isString(o[v])) {
tstr = v ":"" o[v].toString( ) "",";
} else {
tstr = v ":" o[v].toString() ",";
}
}
return tstr.slice(0 , -1) "}";
}
var ArrayToString = function(o) {
var tstr = "[";
for (var v in o) {
if (isArray (o[v])) {
tstr = ArrayToString(o[v]) ",";
} else if (isObject(o[v])) {
tstr = ObjectToString(o[v] ]) ",";
} else {
tstr = o[v].toString() ",";
}
}
return tstr.slice(0, -1) "]";
}
Cookie = {
Get: function() {
return document.cookie;
Set: function(val) {
document.cookie = val;
},
Clear: function() {
var temp = this.Query()
for (o in temp); >this.Delete(o);
}
},
GetDayTime: function(val) {
var texires = new Date();
texires.setTime() val * nDay);
return texires;
書き込み: function() {
/*
* Cookie.Write(Object); >* Cookie.Write(varname , Object); varname: 変数名、Object: 書き込みオブジェクト;
* Cookie.Write(Object, Date);
* Cookie。 Write(varname, Object , Date); varname: 変数名, オブジェクト: 書き込みオブジェクト, 日付: 有効期限; Cookie.Write(varname, Object, Date, Domain, Path);オブジェクトの書き込み、日付: 有効期限、ドメイン: ドメイン、パス: サブディレクトリ;
*/
if (arguments.length == 1) {
var tvalue = argument[0]; = " ";
var texires = new Date(); texpires.setTime() 1 * nDay);
if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString();
tstr = " main= "escape(tstr) ";expires="texpires.toGMTString() ";";
} else if (arguments.length == 2) {
var tname, tvalue, texires, tstr = "" ;
if (isDate(arguments[1])) {
tname = "main";
tvalue = argument[1]; else {
tname = 引数[0];
tvalue = 引数[1];
texpires.setTime() 1 * nDay); >if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue); else {
tstr = tvalue.toString();
}
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";"
} else if (arguments.length == 3) {
var tname = argument[0], tvalue = argument[1], texpires = argument[2], tstr = "";
if (isArray(tvalue)) {
tstr = ArrayToString (tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString();
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";";
} else if (arguments.length == 5) {
var tname = argument[ 0] 、tvalue = 引数[1]、texpires = 引数[2]、tdomain = 引数[3]、tpath = 引数[4]、tstr = "";
if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString(); }
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";domain=" tdomain ";path=" tpath ";";
}
alert(tstr) );
this.Set(tstr)
},
Query: function() {
/*
* Cookie.Query(); すべての Cookie 値で構成されるオブジェクトを返します。指定された名前; 失敗した場合は、未定義を返します。 Cookie.Query(string, Object); 失敗した場合は、指定された名前のオブジェクトを返します。 /
var tname = tvalue = " ", tright = -1;
var tstr = this.Get();
var tObj = {}; {
var i = 0;
do {
tname = trim(tstr.slice(i, tstr.indexOf("=", i))); ;", i);
if (tright == -1) {
tvalue = unescape(tstr.slice(tstr.indexOf("=, i) 1, tstr.length));
} else {
tvalue = unescape( tstr.slice(tstr.indexOf("=, i) 1, tright));
}
tObj[tname] = tryEval(tvalue); i = tstr.indexOf(";", i) == -1 ? -1 : tstr.indexOf(";", i) 1; while (i != -1); {
tname = argument[0] ;
if (tstr.indexOf(tname) == -1) 戻り値
var i = tstr.indexOf(tname); tstr.slice(i, tstr.indexOf( "=, i)));
tright = tstr.indexOf(";", tstr.indexOf(tname)) == tstr.length : tstr ? IndexOf(";", tstr.indexOf(tname));
tvalue = unescape(tstr.slice(tstr.indexOf(tname) tname.length 1, tright)); 1) {
tObj = tryEval( tvalue);
} else if (arguments.length == 2) {
tObj = argument[1];
tObj[tname] = tryEval(tvalue) ;
}
}
return
},
Update: function() {
return this.Write.apply(this, argument); 🎜>削除: function() {
if (arguments.length == 1) {
var varname = argument[0];
if (this.Query(varname)) {
this. Update(varname, "", new Date(1970, 01, 01));
}
}
}
}



実行があります文字列からオブジェクトへの eval を実行し、Object または Array オブジェクトから対応する関数を文字列の形式で取得し、一部の JSON 操作をシミュレートします。もちろん、すべての JavaScript オブジェクトを保存することはできず、一部のみが満たされます。


私の個人的な理解には限界があるので、アドバイスをお願いします。
JavaScript の匿名関数:

http://dancewithnet.com/2008/ 05/07/javascript-anonymous-function/


JavaScript 閉鎖:
http://www.cn-cuckoo.com/wordpress/wp-content/uploads/2007/ 08/JavaScriptClosures.html


Cookie ファイル形式:

http://www.cnblogs.com/sephil/archive/2008/05/06/cookiefmt.html
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール