JavaScript の 関数 の this オブジェクト は、関数が実行されるスコープです (例: 関数が Web ページのグローバル スコープで呼び出される場合、 が参照する this オブジェクト は窓)。
JavaScript のこれは、Java などのオブジェクト指向言語のこれとは大きく異なります。bind()、call()、および apply() 関数は、この柔軟性をさらに拡張します。 読みやすさを確保するために、この記事では直訳ではなく意訳を使用しています。また、この記事の著作権は原著者に帰属し、翻訳は学習のみを目的としています。
JavaScript キーワードを十分に理解していないと、予期せぬ落とし穴に陥ることがあります。ここでは、これが実際に何を指すのかを判断するのに役立つ 5 つの一般的なルールをまとめました。すべての状況がカバーされているわけではありませんが、日常のほとんどの状況はこれらのルールを使用して正しく推測できます。
this の値は通常、関数の実行環境によって決まります。つまり、関数の呼び出し方法に依存します。
同じ関数が呼び出されるたびに、これは異なるオブジェクトを指す可能性があります。ome ブラウザ開発者パネルを開き (Windows: Ctrl + Shift + J) (Mac: Cmd + Option + J)、次のように入力して確認します: console.log(this);
出力は何ですか?
えー
! グローバル スコープでは、これはグローバル オブジェクトを指すためです。ブラウザ内のグローバル オブジェクトはウィンドウ オブジェクトです。 これが window オブジェクトを指す理由をより明確に理解するために、別の例を見てみましょう:
// Window {}
var myName = 'Brandon';
実際、グローバルに定義されたすべての 変数
は window オブジェクトにバインドされています。次のテストを行ってみましょう: myName
// 输出 'Brandon'
これを関数内に入れて、その効果を見てみましょう。
window.myName // 输出 'Brandon' window.myName === myName // 输出 true
これがまだグローバル ウィンドウ オブジェクトを指していることがわかります。 this キーワードは宣言されたオブジェクト内にないため、デフォルトでグローバル ウィンドウ オブジェクトになります。これはほとんどの初心者にとっては理解するのが少し難しいかもしれません。この記事を読むと、突然理解できるようになります。
注: strcit モードの場合、上記の例ではこれは未定義です。Declared オブジェクト)
this キーワードが宣言されたオブジェクト内で使用される場合、その値は、this を呼び出す関数の最も近い親オブジェクトにバインドされます。この問題を説明するために例を使用してみましょう:
function test(){ return this; } test();
これが宣言されたオブジェクト person の完全な関数で使用される場合、これを呼び出す完全な関数の最も近い親オブジェクトは person であるため、これは person を指します。
これが実際に person オブジェクトを指していることをよりわかりやすく説明するには、次のコードをブラウザのコンソールにコピーして、これを出力します。
var person = { first: 'John', last: 'Smith', full: function() { console.log(this.first + ' ' + this.last); } }; person.full(); // 输出 'John Smith'
次に、より複雑な例を見てみましょう:
var person = { first: 'John', last: 'Smith', full: function() { console.log(this); } }; person.full(); // 输出 Object {first: "John", last: "Smith", full: function}
ここにはネストされたオブジェクトがありますが、これは誰を指しているのでしょうか。 これを印刷して見てみましょう:
var person = { first: 'John', last: 'Smith', full: function() { console.log(this.first + ' ' + this.last); }, personTwo: { first: 'Allison', last: 'Jones', full: function() { console.log(this.first + ' ' + this.last); } } };
前に説明したルールが満たされていることがわかります。その値は、これを呼び出した関数の最も近い親オブジェクトにバインドされます。
newKeyword
new キーワードを使用して新しいオブジェクトを構築すると、これはこの新しいオブジェクトにバインドされます。例を見てみましょう:
person.full(); // 输出 'John Smith' person.personTwo.full(); // 输出 'Allison Jones'
最初のルールに基づいて、これがグローバル オブジェクトを指していると推測できます。ただし、 new キーワードを使用して新しい変数を宣言すると、Car 関数の this は新しい空のオブジェクトにバインドされ、this.make と this.model の値が初期化されます。
function Car(make, model) { this.make = make; this.model = model; };call、bind、apply
call()、bind()、apply() で this のバインディング オブジェクトを明示的に設定できます。これら 3 つの機能は非常に似ていますが、微妙な違いに注意する必要があります。
例を見てみましょう: this.a と this.b が未定義であるため、
var myCar = new Car('Ford', 'Escape'); console.log(myCar); // 输出 Car {make: "Ford", model: "Escape"}
add 関数は NaN を出力します。
ここでオブジェクトを導入し、call() と apply() を使用して呼び出します。
function add(c, d) { console.log(this.a + this.b + c + d); } add(3,4); // 输出 NaN
add.call() を使用する場合、最初のパラメータはバインドする必要があるオブジェクトで、残りは関数自体のパラメータを追加します。
したがって、this.a は ten.a を指し、this.b は ten.b を指します。 add.apply() は、2 番目のパラメーターが add 関数のパラメーター bind()函数和call()类似,但是bind()函数不会立即被调用。bind()函数会返回一个函数,并且将this绑定好。接下来我们来用例子来帮助理解bind()函数的应用场景: 执行: 如果我们想使用large.a的值,而不是small.a呢? 我们可以使用call/apply: 但是,如果我们现在还不知道这三个参数应该传入什么值,应该怎么办呢? 我们可以使用bind: 如果我们将bindTest在控制台下打印出来,我们会看到: 注意:该函数已经将this绑定到large对象,并且传入了第一个参数b。所以,我们接下来是需要传入余下的参数即可: 箭头函数(=>) 因为需要很大的篇幅,我们会专门写一篇博客来介绍。 结论 当你读完这篇博客,你应该可以理解大多数情况下this指向的对象。 this的值通常是由当前函数的执行环境所决定;
を格納するために使用される array である点を除いて似ています。 var small = {
a: 1,
go: function(b,c,d){
console.log(this.a+b+c+d);
}
}
var large = {
a: 100
}
small.go(2, 3, 4);
// 输出 10
small.go.call(large, 2, 3, 4);
// 输出 109
var bindTest = small.go.bind(large, 2);
console.log(bindTest);
// 输出 function (b,c,d){console.log(this.a+b+c+d);}
bindTest(3, 4);
// 输出 109
接下来我们来总结一下:
在全局作用域,this指向全局对象 (window对象);
当使用new关键字声明,this指向新建对象;
我们可以使用call(), bind(), apply()来设置this;
箭头函数不会绑定this。
以上がJavaScriptの基礎を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
