この記事では、JavaScriptのオブジェクト指向プログラミングの高度な機能について説明します。次のように、参照のために共有してください。
1.オブジェクトを作成する3つの方法:
最初の構造方法:新しいオブジェクト
var a = new object(); ax = 1、ay = 2;
2番目の構造方法:オブジェクトの直接測定
var b = {x:1、y:2};3番目の構造方法:タイプを定義します
関数ポイント(x、y){this.x = x; this.y = y;} var p = new Point(1,2);2。オブジェクトにアクセスします
オブジェクトのプロパティにアクセスします
ブラケット表記:Hero ['name']。 、
ポイント表記:Hero.Name。
アクセスされたプロパティが存在しない場合、未定義は返されます。
オブジェクトにアクセスする方法
メソッド名の後にブラケットのペアを追加します:hero.say()。
アクセス属性などのアクセス方法:Hero ['Say']()。
3.属性とメソッドを削除します
//空のオブジェクトを作成しますvar hero = {}; // hero.nameに属性とメソッドを追加します= "javascript"; hero.value = "helloworld"; hero.sayname = function(){return "hello" + hero.name;}; // test alert(hero.name); //出力javascriptalert(hero.sayname()); // output hello javascript // Heroオブジェクトの名前属性を削除するHero.name; // test alert(hero.sayname()); //出力Hello Undefined4.この値を使用します
//空のオブジェクトを作成するvar hero = {}; //属性とメソッドをヒーローオブジェクトに追加しますhero.name = "javascript"; hero.value = "helloworld"; hero.sayname = function(){return "hello" + this;}; // test alert(hero.name); //出力javascripttalet(hero.sayname()); // hello javascriptを出力します要約:
ここでこれは、実際には「このオブジェクト」または「現在のオブジェクト」を指します。
②これの使用は、ほとんどの人にとって問題です。したがって、使用しすぎることはお勧めしません!
5。組み込みオブジェクト
組み込みのオブジェクトは、ほぼ3つのグループに分けることができます。
dataデータカプセル化クラスオブジェクト - オブジェクト、配列、ブール、数字、文字列を含む。これらのオブジェクトは、JavaScriptのさまざまなデータ型を表しており、すべてが独自の異なるタイプのリターン値、および未定義およびヌル状態を持っています。
②ツールクラスオブジェクト - 数学、日付、regexpなどのトラバーサルを提供するために使用されるオブジェクトを含む。
classエラークラスオブジェクト - 一般的なエラーオブジェクトやその他のさまざまな特別なエラークラスオブジェクトを含む。特定の例外が発生した場合、プログラムの動作状態を修正するのに役立ちます。
6.オブジェクトオブジェクト
オブジェクトは、JavaScript内のすべてのオブジェクトの親オブジェクトです。つまり、すべてのオブジェクトがオブジェクトオブジェクトから継承されます。
空のオブジェクトを作成します:
var object = {}; var obj = new object();7.アレイオブジェクト
配列オブジェクトは、単一の変数に複数の値を保存するために使用されます。
空の配列オブジェクトを作成します。
var object = {}; var obj = new Array();例1:
//文字列の例を反転させる文字列var str = "a、b、c、d、e、f、g" arr = arr.Reverse(); // TEST PRINT ALERT(arr.ToString());
8.ストリングオブジェクト
文字列オブジェクトと基本的な文字列タイプの違い:
var str = "hello"; var obj = new String( "world"); alert(typeof str); // typeof stringalert(typeof obj); // typeofオブジェクト
例1:
//文字列が指定された文字列を含むかどうかを判断する例// var str = "abcdefg"; var subst = "efg";/**判断する2つの文字列を定義します。 string(str); //判断された文字列var result = string.substr(str.indexof(substr)、substr.length);/**インターセプトされた文字列が空であるかどうかを判断します。 false;}} alert(sub(str、substr));
9。プロトタイプ
関数自体は、メソッドとプロパティを含むオブジェクトでもあります。今、私たちが研究したいのは、関数オブジェクトの別のプロパティであるプロトタイプです。
プロトタイプを使用してメソッドとプロパティを追加します
独自のプロパティを使用してプロトタイププロパティを書き換えます
内蔵オブジェクトを拡張します
プロトタイプを使用してメソッドとプロパティを追加します
以下は、新しい関数オブジェクトを作成し、いくつかのプロパティとメソッドを設定することです。
function Hero(name、color){this.name = name; this.color = color; this.whatareyou = function(){return "i a a" + this.color + "" + this.name; }} var Hero = new Hero( "JavaScript"、 "Red"); alert(hero.whatareyou()); //出力私は赤いJavaScriptです上記のヒーロー関数オブジェクトにいくつかのプロパティとメソッドを追加します。
hero.prototype.price = 100; hero.prototype.rating = 3; hero.prototype.getInfo = function(){return "rating:" + this.rating + "、rice:" + this.price;} alert(hero.getinfo()); //出力評価:3、価格:100上記の方法は次のように行うこともできます。
hero.prototype = {price:100、rating:3、getInfo:function(){return "rating:" + this.rating + "、rice:" + this.price; }};独自のプロパティを使用してプロトタイププロパティを書き換えます
オブジェクトの属性がプロトタイプ属性と同じ場合はどうすればよいですか?答えは、オブジェクト自身の属性がプロトタイプ属性よりも優先度が高いということです。
function hero(){this.name = "jscript";} hero.prototype.name = "javascript"; var hero = new Hero(); alert(hero.name); //出力jscriptdelete hero.name; alert(hero.name); // JavaScriptを出力します内蔵オブジェクトを拡張します
//プロトタイプアレイオブジェクト配列のために裁判官に関数を追加する。prototype.inarray= function(color){for(var i = 0、len = this.length; i <len; i ++){if(this [i] === color){return true; }} return false;} //配列オブジェクトvar a = ["red"、 "green"、 "blue"]; // test alert(a.inarray( "red")); //truealert(a.inarray("yellow ")); //間違い10。継承
両方のクラスが同じインスタンスタイプの場合、それらの間にいくつかの関係があります。同じインスタンス「継承」のタイプ間の一般化された関係を呼び出します。
継承関係には、少なくとも3つの意味が含まれています。
Subclassesのインスタンスは、親クラスの方法を共有できます。
Subclassは、親クラスのメソッドをオーバーライドしたり、新しい方法を拡張したりできます。
③サブクラスと親クラスはどちらもサブクラスインスタンスの「タイプ」です。
JavaScriptでは、「継承」はサポートされていません。つまり、JavaScriptには継承された構文はありません。この意味で、JavaScriptは直接的なオブジェクト指向言語ではありません。
11。プロトタイプチェーン
プロトタイプチェーンは、ECMAScript標準によって策定されたデフォルトの継承方法です。
例えば:
function a(){this.name = "a"; this.tostring = function(){return this.name};} function b(){this.name = "b";} function c(){this.name = "c"; this.age = 18; this.getage = function(){return this.age}説明:
オブジェクトは、Bオブジェクトのプロトタイププロパティに直接作成され、これらのオブジェクトの元のプロトタイプを拡張しません。
新しいエンティティは、新しいA()を介して作成され、その後、オブジェクトのプロトタイプを上書きするために使用されます。
JavaScriptは、オブジェクトに完全に依存する言語であり、クラスの概念はありません。
したがって、関連する継承作業をエンティティのプロパティを介して完了する前に、新しいa()でエンティティを直接作成する必要があります。
そのような継承の実装を完了した後、A()の変更、書き換え、または削除はB()に影響しません。
プロトタイプからのみ継承:
function a(){} a.prototype.name = "a"; a.prototype.tostring = function(){return this.name}; function b(){} b.prototype = a.prototype; b.prototype; b.prototype.name = "b"; function c(){} c.prototype = b.prototype; = 18; c.prototype.getage = function(){return this.age};オブジェクト間の継承(拡張コンテンツ、できない)(浅いコピー)
//関数はオブジェクトを受け入れ、そのコピー関数extendCopy(p){var z = {}; //空のオブジェクトzを定義します(p in p){// var i = 0; i <p.length; i ++ z [i] = p [i]; //配列として扱われている場合、理解できます} // uber属性:p z.uber = pのプロトタイプにzおよびポイントzの親としてpを使用します。 z;} // return z;} //オブジェクトaを定義しますが、オブジェクトaは関数オブジェクトではありませんvar a = {name: "a"、toStr:function(){return this.name;}} //オブジェクトBはfunctionオブジェクトvar b = extendcopy(a)ではありません。 B.NAME = "B"; b.toStr = function(){return this.uber.toStr() + "、" + this.name;}; // define object cは関数オブジェクトvar c = extendcopy(b); c.name = 18; alert(c.tostr()); //出力a、b、18PS:チュートリアルの多くのコードレイアウトは標準化されていません。誰もが使用するためのいくつかのJavaScriptコードのフォーマットと美化ツールを次に示します。
JavaScriptコードフォーマットツール:
http://tools.vevb.com/code/js
JavaScriptコードの美化/圧縮/フォーマット/暗号化ツール:
http://tools.vevb.com/code/jscompress
JSMINオンラインJS圧縮ツール:
http://tools.vevb.com/code/jsmincompress
JavaScriptの詳細については、このサイトの特別なトピックを確認してください:「JavaScriptオブジェクト指向のチュートリアル」、「JavaScriptのJSON操作スキルの要約」、「JavaScriptの切り替え効果とテクニックの要約」、JavaScript Search Algorithm Skillsの要約」、「JavaScriptの特別な効果」とテクニックの概要の概要を確認してください。 「JavaScriptデータ構造とアルゴリズムのスキルの概要」、「JavaScriptトラバーサルアルゴリズムとテクニックの概要」、および「JavaScriptの数学的操作の使用法の要約」
この記事がみんなのJavaScriptプログラミングに役立つことを願っています。