JavaScriptミニマリスト入門(2):オブジェクトと関数_JavaScriptスキル
この記事を読むには、他の言語でのプログラミング経験が必要です。
JavaScript の単純な型には次のものがあります:
1. 数字
2. 文字列
3.ブール値 (true および false)
4.ヌル
5.未定義
他のすべての型はオブジェクトです (typeof 演算子の戻り値に騙されないようにしましょう)。次に例を示します。
1.機能
2.配列
3. 正規表現
4. オブジェクト (オブジェクトは当然オブジェクトです)
オブジェクトの基本
JavaScript では、オブジェクトは属性のコレクションです (オブジェクトは連想配列です)。
1. 属性名は文字列である必要があります
2. 属性値。unknown
オブジェクト リテラルからオブジェクトを作成します:
// オブジェクト リテラルを使用して空のオブジェクトを作成します {}
var empty_object = {};
オブジェクトの属性名と属性値:
var stooge = {
// "first-name" は属性名、"Jerome" は属性値
"名": "ジェローム",
// "last-name" は属性名、"Howard" は属性値
"姓": "ハワード"
};
属性名が有効な識別子の場合は、引用符を省略できます:
var フライト = {
航空会社: 「オセアニック」、
番号: 815、
出発: {
IATA: "SYD"、
時刻: "2004-09-22 14:55"、
都市: 「シドニー」
}、
到着: {
IATA: 「LAX」、
時刻: "2004-09-23 10:42"、
都市: 「ロサンゼルス」
}
};
プロパティへのアクセスの例を見てみましょう:
var owner = { name: "Name5566" };
owner.name; // "名前5566"
owner["name"] // "Name5566"
owner.job; // 未定義
owner.job = "コーダー" // または owner["job"] = "コーダー";
属性名が正当な識別子ではない場合は、引用符で囲む必要があります。存在しないプロパティの値は未定義です。オブジェクトは値ではなく参照によって渡されます:
var x = {};
var owner = x;
owner.name = "Name5566";
x.name; // x.name === "名前5566"
ここで、x と owner は同じオブジェクトを指します。
オブジェクトのプロパティは、delete 演算子を使用して削除できます。
delete obj.x; // オブジェクト obj
の x 属性を削除します。
オブジェクトのプロトタイプ
各オブジェクトはプロトタイプ オブジェクトにリンクされており、オブジェクトはプロトタイプ オブジェクトからプロパティを継承できます。オブジェクトリテラルによってオブジェクトを作成し、そのプロトタイプオブジェクトは Object.prototype オブジェクトです (Object.prototype オブジェクト自体にはプロトタイプオブジェクトはありません)。オブジェクトを作成する際に、そのオブジェクトのプロトタイプオブジェクトを設定することができます(具体的な設定方法については後述します)。オブジェクトのプロパティを (変更するのではなく) 取得しようとするとき、そのプロパティがオブジェクトに存在しない場合、JavaScript はそのオブジェクトのプロトタイプ オブジェクトからプロパティを取得しようとします。 、プロトタイプ オブジェクトからプロトタイプ オブジェクトが検索され、Object.prototype プロトタイプ オブジェクトまで検索されます。属性を取得する場合と比較して、オブジェクトの特定の属性を変更しても、プロトタイプ オブジェクトには影響しません。
関数の基本
JavaScript では、関数もオブジェクトであり、Function.prototype プロトタイプ オブジェクトにリンクされます (Function.prototype は Object.prototype にリンクされます)。関数にはプロトタイプという名前のプロパティがあり、その値の型はオブジェクトです。このオブジェクトにはプロパティ コンストラクターがあり、コンストラクターの値は次の関数です。
typeof f.prototype; // 'オブジェクト'
typeof f.prototype.constructor // '関数'
f === f.prototype.constructor // true
1. 関数コンテキスト
2. 機能コード
b を返します;
}
console.log(f); // 出力 [関数: add]
1. 再帰呼び出しの場合
2. デバッガー、開発ツールなどによって関数を識別するために使用されます
b を返します;
}
add(1, 2, 3); // 実パラメータと仮パラメータが一致しません
関数と関数がアクセスする外部変数はクロージャを形成します。これが JavaScript の重要な利点です。
関数呼び出し
各関数が呼び出されるとき、次の 2 つの追加パラメータを受け取ります:1.これ
2.引数
1. メソッド呼び出しモード。オブジェクトのプロパティが関数である場合、それはメソッドと呼ばれます。メソッドが o.m(args) 経由で呼び出される場合、これはオブジェクト o です (this と o は呼び出しが行われたときにのみバインドされることがわかります)。例:
値: 0、
インクリメント: function(v) {
This.value = (typeof v === 'number' ? v : 1);
}
};
obj.increment(); // これ === obj
var p = function() {
console.log(this.message);
}
p(); // 'Hello World' を出力します
この動作は混乱を招く場合があります。例を見てみましょう。
obj = {
値: 0、
インクリメント: function() {
var helper = function() {
//グローバルオブジェクトの値に1を加算します
This.value = 1;
}
// ヘルパーは関数として呼び出されます
// したがって、これはグローバル オブジェクトです
helper();
}
};
obj.increment(); // obj.value === 0
望ましい結果は次のようになります:
obj = {
値: 0、
インクリメント: function() {
var that = this;
var helper = function() {
That.value = 1;
}
helper();
}
};
obj.increment(); // obj.value === 1
3. コンストラクター呼び出しモード。 new というプレフィックスを付けることを意図した関数は、コンストラクターと呼ばれます。例:
// テストはコンストラクターと呼ばれます
var Test = function(string) {
This.message = string;
}
var myTest = new Test("Hello World");
関数は、その前に new を追加することで呼び出すことができます (このような関数は通常、大文字で始まります) new を追加した後、この関数のプロトタイプ プロパティにリンクされたオブジェクトが作成され、コンストラクター内でこれが作成されます。このオブジェクト。
4.通話モードを適用します。関数の apply メソッドを使用して関数を呼び出します。この関数には 2 つのパラメーターがあり、1 つ目は this で、2 つ目はパラメーター配列です。例:
var add = function(a, b) {
b を返します;
}
var ret = add.apply(null, [3, 4]) // ret === 7
;
関数が呼び出されると、実際のパラメータがすべて含まれる argument という名前のクラス配列 (実際の JavaScript 配列ではありません) にアクセスできるため、可変長パラメータを実装できます。
var add = function() {
var sum = 0;
for (var i=0; i
}
合計を返します;
}
add(1, 2, 3, 4);
例外
次に、JavaScript の例外処理メカニズムについて説明します。 throw ステートメントを使用して例外をスローし、try-cache ステートメントを使用して例外をキャッチして処理します。
var add = function (a, b) {
If (typeof a !== 'number' || typeof b !== 'number') {
// 例外をスローします
スロー {
名前: 'TypeError',
メッセージ: 「ニーズ番号を追加」
};
}
b を返します;
}
//例外をキャッチして処理します
{
を試してください Add("7");
// e はスローされた例外オブジェクトです
} キャッチ (e) {
console.log(e.name ': ' e.message);
}
JavaScript タイプにプロパティを追加する
JavaScript のほとんどの型にはコンストラクターが存在します:
1. オブジェクトのコンストラクターは Object
です。
2. 配列のコンストラクターは Array
です
3. 関数のコンストラクターは Function
です。
4. 文字列のコンストラクターは String
です
5. 数値のコンストラクターは Number
です
6. Boolean のコンストラクターは Boolean
です
7. 正規表現のコンストラクタは RegExp
コンストラクターのプロトタイプにプロパティ (多くの場合メソッド) を追加して、このプロパティを関連変数で使用できるようにします。
Number.prototype.integer = function() {
数学を返します[this }
(1.1).integer() // 1
範囲
JavaScript ではスコープを構築する関数が必要です:
function() {
// ...
}();
ここで匿名関数が作成され、実行されます。スコープを通じて公開したくない変数を非表示にすることができます:
var obj = function() {
//値を非表示にし、外部からアクセスできないようにします
var 値 = 0;
戻り値 {
// このメソッドのみが値を変更できます
インクリメント: function() {
値 = 1;
}、
// このメソッドのみが値を読み取ることができます
getValue: function() {
戻り値;
}
};
}();
obj.increment();
obj.getValue() === 1;
継承
JavaScript で継承を実装する方法はたくさんあります。
オブジェクトを作成するときに、そのオブジェクトに関連付けられたプロトタイプ オブジェクトを設定できます。
//プロトタイプ オブジェクトが {x:1, y:2}
であるオブジェクトを作成します var o = Object.create({x:1, y:2});
Object.create メソッドは ECMAScript 5 で定義されています。ECMAScript 3 を使用する場合は、create メソッドを自分で実装できます。
// Object.create メソッドが定義されていない場合
if (typeof Object.create !== 'function') {
// Object.create メソッドを作成します
Object.create = function (o) {
var F = function () {};
F.prototype = o;
// 新しいオブジェクトを作成します。このオブジェクトのプロトタイプ オブジェクトは o
です。 return new F();
};
}
Object.create メソッドを通じて、プロトタイプベースの継承を実行します。新しいオブジェクトは古いオブジェクトのプロパティを直接継承します (クラスベースの継承と比較して、クラスの存在は必要なく、オブジェクトはオブジェクトを直接継承します)。例:
var myMammal = {
名前: '哺乳類のハーブ'、
Get_name: function() {
return this.name;
}、
言う: function() {
これを返します。「;
」 }
};
// myMammal を継承
var myCat = Object.create(myMammal);
myCat.name = 'ヘンリエッタ';
myCat.saying = 'ニャー';
myCat.purr = function(n) {
var i, s = '';
for (i = 0; i
s = '-';
}
s = 'r';
}
s;
を返します };
myCat.get_name = function() {
this.says() ' ' this.name ' ' this.says();
を返します };
上記のコードは非常に単純ですが、プライベート メンバーを保護することはできません。モジュールパターンを使用できます。モジュール パターンでは、特定の種類のオブジェクトが関数によって生成され、関数スコープはプライベート メンバーを外部アクセスから保護するために使用されます:
// 哺乳類オブジェクトの構築に使用される哺乳類関数
var mammal = 関数(仕様) {
// それは構築されたオブジェクトです
var that = {};
// パブリック メソッド get_name は外部からアクセス可能
That.get_name = function() {
// spec.name には
の外部から直接アクセスできません return spec.name;
};
// パブリック メソッドは外部からアクセスできることを示します
That.says = function() {
// spec.saying は外部から直接アクセスできません
スペックを返す || '';
};
それを返してください;
};
//哺乳類オブジェクトを作成します
var myMammal = 哺乳類({名前: 'ハーブ'});
//cat オブジェクトを構築するために使用される cat 関数
var cat = 関数(仕様) {
spec.saying = spec.saying || 'ニャー';
// 猫は哺乳類から継承しているため、哺乳類オブジェクトが最初に構築されます
var that = 哺乳類(仕様);
// パブリックメソッド purr
を追加します That.purr = function(n) {
var i, s = '';
for (i = 0; i
s = '-';
}
s = 'r';
}
return s;
};
// パブリックメソッド get_name
を変更します That.get_name = function() {
return that.says() ' ' spec.name
' ' that.says();
それを返します;
};
};
//猫オブジェクトを作成
var myCat = cat({name: 'ヘンリエッタ'});
モジュール パターンでは、コンストラクターを呼び出すことによって継承が実現されます。さらに、サブクラス内の親クラスのメソッドにアクセスすることもできます:
Object.prototype.superior = 関数(名前) {
var that = this、method = that[name];
return function() {
return method.apply(that, argument);
};
};
var Coolcat = 関数 (仕様) {
// 获取子类の get_name メソッド
var that = cat(spec), super_get_name = that.superior('get_name');
that.get_name = function(n) {
return 'like ' super_get_name() ' baby';
};
それを返してください;
};

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。
