検索
ホームページウェブフロントエンドjsチュートリアル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 にリンクされます)。関数にはプロトタイプという名前のプロパティがあり、その値の型はオブジェクトです。このオブジェクトにはプロパティ コンストラクターがあり、コンストラクターの値は次の関数です。

コードをコピー コードは次のとおりです:
var f = function() {}

typeof f.prototype; // 'オブジェクト'
typeof f.prototype.constructor // '関数'

f === f.prototype.constructor // true

関数はオブジェクトです。関数はオブジェクトと同じように使用できます。つまり、関数を変数または配列に保存したり、パラメーターとして関数に渡したり、関数内で定義したりできます。余談ですが、関数には 2 つの隠しプロパティがあります:

1. 関数コンテキスト

2. 機能コード

関数は次のように作成されます:

コードをコピーします コードは次のとおりです:
var f = function add(a, b) {
b を返します;
}

console.log(f); // 出力 [関数: add]

キーワード function の後の関数名はオプションです。主にいくつかの目的のために関数名を作成します。

1. 再帰呼び出しの場合

2. デバッガー、開発ツールなどによって関数を識別するために使用されます

多くの場合、関数名は必要ありません。関数名のない関数は匿名関数と呼ばれます。パラメータのリストは括弧で囲まれています。 JavaScript では、実際のパラメータと仮パラメータが一致する必要はありません。例:

コードをコピーします コードは次のとおりです:
var add = function(a, b) {
b を返します;
}

add(1, 2, 3); // 実パラメータと仮パラメータが一致しません

実パラメータが多すぎる場合、追加の実パラメータは無視されます。実パラメータが少なすぎる場合、割り当てられていない仮パラメータの値は未定義になります。関数には戻り値が必要です。return ステートメントで戻り値が指定されていない場合、関数の戻り値は未定義になります。

関数と関数がアクセスする外部変数はクロージャを形成します。これが JavaScript の重要な利点です。

関数呼び出し

各関数が呼び出されるとき、次の 2 つの追加パラメータを受け取ります:

1.これ

2.引数

この値は、特定の呼び出しモードに関連しています。JavaScript には 4 つの呼び出しモードがあります。

1. メソッド呼び出しモード。オブジェクトのプロパティが関数である場合、それはメソッドと呼ばれます。メソッドが o.m(args) 経由で呼び出される場合、これはオブジェクト o です (this と o は呼び出しが行われたときにのみバインドされることがわかります)。例:


コードをコピー コードは次のとおりです:
var obj = {
値: 0、
インクリメント: function(v) {
This.value = (typeof v === 'number' ? v : 1);
}
};
obj.increment(); // これ === obj

2. 関数呼び出しモード。関数がオブジェクトのプロパティではない場合、関数として呼び出され、グローバル オブジェクトにバインドされます。例:

コードをコピーします コードは次のとおりです:
メッセージ = 'Hello World';
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 sum = 引数[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 if (s) {
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 if (s) {
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';
    };
    それを返してください;
};

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

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?Apr 04, 2025 pm 09:21 PM

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?Apr 04, 2025 pm 09:18 PM

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

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