目次
1. 何もないところから何かを生み出す
2. オブジェクトを作成する機械
3. 物体を製造するための機械が日に日に増えていきました
四. 制造机器的机器
五. 让世界动起来
六. 让世界立体起来
七. 世界最终的样子
ホームページ ウェブフロントエンド jsチュートリアル JavaScript の世界におけるすべての誕生についての詳細な紹介

JavaScript の世界におけるすべての誕生についての詳細な紹介

Mar 03, 2017 pm 03:10 PM
javascript

1. 何もないところから何かを生み出す

最初は何もありませんでした。

創造主は言いました: 何もそれ自体が物ではないので、ヌルが存在します:

今、私たちは何かを作成しなければなりません。しかし、原材料がない場合はどうすればよいでしょうか?

「ヌルじゃないの?」という声が聞こえた。

別の声は次のように言いました: しかし、null は何も意味しません。

創造主は言いました: なら、何もないところから何かを作りましょう!

つまり:

JavaScript のオブジェクト No. 1 が生成されます。これを No. 1 と呼んでもいいでしょう。

この1号物体はすごいです、万物の真の祖先です。すべてのオブジェクトが持つプロパティを持っています。

__proto__とは何ですか?それは「誕生」または相続を意味します。

2. オブジェクトを作成する機械

オブジェクトがすでにあるので、残りは簡単に処理できます。1 つは 2、2 は 3、そして 3 がすべてだからです。

しかし、創造主はとても怠け者で、自分の手で物を一つ一つ作りたくないのです。そこで彼はオブジェクトを作成できるマシンを作りました:

彼はそのマシンに Object という名前を付けました。

このマシンは何もないところからオブジェクトを作成することはできません。このテンプレート オブジェクトに従ってオブジェクトを作成するには、テンプレート オブジェクトが必要です。当然、唯一のNo.1オブジェクトをテンプレートとして使用します。写真のプロトタイプは、マシンのテンプレート オブジェクトを表します。

マシンを起動するにはどうすればよいですか?新しいコマンドを通じて。マシンに向かって「新しい!」と叫ぶと、オブジェクトが作成されます。

機械の出現により、オブジェクトの自動バッチ生産が可能になり、創造主の手を解放しました。それから創造主は他のことをしに行きました。

機械がテンプレートに従ってまったく同じオブジェクトを機械的にコピーするだけなら、あまりにも愚かです。

親の形質を受け継いだことに基づいて、人間の子孫は親にはない形質を発達させることができます。同様に、マシンがオブジェクトを製造する場合、テンプレート オブジェクトのプロパティを継承するだけでなく、新しいプロパティを追加することもできます。これにより、JavaScript の世界はますます多様化します。

たとえば、ある日、オブジェクト マシンはフラグと呼ばれる特別な属性を持ち、その属性値は 10 でした。グラフィック表現は次のとおりです:

コードで書くと次のようになります:

var obj = new Object({ flag: 10 });
ログイン後にコピー

創造の精力的な動きが始まりました...

3. 物体を製造するための機械が日に日に増えていきました

仕事を検査する。彼は、Object が多くのオブジェクトを作成したことを見て非常に喜んでいました。

同時に、「羽の鳥が群れをなす」という原理に従って、これらの物体が多くのカテゴリに分類できることも発見しました。賢い作成者は、さらにいくつかのマシンを構築して、各マシンに特定の種類のオブジェクトの製造を担当させてみてはどうだろうかと考えました。そこで彼はいくつかの機械を作り、それらに名前を付けました。

文字列: テキストの一部を表すオブジェクトの作成に使用されます。
数値: 数値を表すオブジェクトを作成するために使用されます。
ブール値: 善悪を表すオブジェクトを作成するために使用されます。
配列: 順序付けされたキュー オブジェクトの作成に使用されます。
日付: 日付を表すオブジェクトの作成に使用されます。
Error: エラーを表すオブジェクトを作成するために使用されます。
...

複数の機械が連携し始め、それぞれが独自の役割を果たし、創造運動は新たな段階に入りました...

創造者は再び考え始めました:機械は物体を作るために使用されますが、機械自体はは実際には特別なオブジェクトです。マシンの数が非常に多くなったので、それらの共通の特徴をまとめてオブジェクト システムに組み込む必要があります。

そこで、作成者は、No. 1 のオブジェクトに基づいて No. 2 のオブジェクトを作成し、それを使用してすべてのマシンの共通の特性を表現しました。つまり、すべてのマシンのプロトタイプ オブジェクトとして使用します。

(注: __proto__ は書くのが面倒なので、後ほど代わりに [p] を使用します)

もちろん、Object と同様に、これらのマシンもそれぞれテンプレート オブジェクト、つまりプロトタイプ属性を持つ必要があります。指すオブジェクト。明らかに、テンプレート オブジェクトは No. 1 オブジェクト、つまり

を継承する必要があります。

这张图显示了JavaScript世界中那些最基本的机器本身的原型链,以及它们的模板对象的原型链。不过看起来太复杂了,所以后面我们就不再把它们完整地画出来了。

四. 制造机器的机器

造物主高兴地想:这下可好了,我造出了Object机器,实现了对象制造的自动化。然后又造出了String、Number等机器,实现了特定类别的对象制造的自动化。但是,为啥总感觉似乎还缺点什么呢?

对啦,还缺少一台制造机器的机器啊!

很快,万能的造物主就把它造了出来,并把它命名为Function。有了Function机器后,就可以实现自动化地制造机器了。
让我们来观察一下Function:

首先,Function是一台机器,所以它的原型对象也是No. 2对象。
其次,Function又是一台制造机器的机器,所以它的模板对象也是No. 2对象。
所以我们得到了Function的一个非常特别的性质:

Function.__proto__ === Function.prototype
ログイン後にコピー

哇,太奇妙了!

不要奇怪,这个性质不过是”Function是一台制造机器的机器“这个事实的必然结果。

从这张图中,我们发现:所有的函数(包括Function)的原型都是No. 2对象,而同时Function.prototype也是No. 2对象。这说明了:

从逻辑上,我们可以认为所有机器(包括Function自己)都是由Function制造出来的。

同时,如果再仔细瞧瞧,你会发现:

Object作为一个机器可以看做是有由Function制造出来的,而Function作为一个对象可以看做是由Object制造出来的。

这就是JavaScript世界的“鸡生蛋,蛋生鸡”问题。那么到底是谁生了谁呢?Whatever!

五. 让世界动起来

就像前面所说,机器用来制造某一类对象。正因如此,机器可以作为这类对象的标志,即面向对象语言中类(class)的概念。所以机器又被称为构造函数。在ES6引入class关键字之前,我们常常把构造函数叫做类。

然而,除了作为构造函数来制造对象外,函数通常还有另一个功能:做一件事情。正是有了这个功能,JavaScript的世界才由静变动,变得生机勃勃。

比如说,我们现在用Function机器制造了鸟类(即用来造鸟的机器):

function Bird(color) {
    this.color = color;
}
ログイン後にコピー

然后,对着造鸟机说:“new!”,于是造鸟机发动起来,制造一个红色的鸟:

var redBird = new Bird('#FF0000');
ログイン後にコピー

如果现在我们想让鸟飞起来,该怎么办呢?我们需要再次用Function制造出一台机器,不过这台机器不是用来制造对象的,而是用来做事儿的,即“让鸟飞起来”这件事情:

// 这是一台通过晃动鸟的翅膀,让鸟飞起来的简陋的机器。
function makeBirdFly(bird) {
    shakeBirdWing(bird);
}
ログイン後にコピー

我们知道,让一台制造对象的机器发动,只需要对它喊“new”即可;那么怎样让一台做事情的机器发动呢?更简单,对它咳嗽一声就行了。咳咳咳,

makeBirdFly(redBird);
ログイン後にコピー

于是红鸟飞了起来,世界充满了生机。

从上面的Bird和makeBirdFly的定义可以看出:实际上,制造对象的机器和做事情的机器没什么明显区别,不同的只是它们的使用方式。在两种情况下,它们分别被叫做构造函数和普通函数。

说明1:function xxx语法可以看成new Function的等价形式。
说明2:用户自定义的函数通常既可以作为普通函数使用,又可以作为构造函数来制造对象。ES6新增的class语法定义的函数只能作为构造函数,ES6新增的=>语法定义的箭头函数只能作为普通函数。

六. 让世界立体起来

造物主对目前的世界还是不太满意,因为几乎所有的机器的模板对象都是No. 2,这使得JavaScript世界看起来有点扁。

于是造物主再次研究世界万物的分类问题。他发现有些对象会动、还会吃东西,于是把它们叫做动物,然后造了一台Animal机器来制造它们。他进一步发现,即使都是动物,也还是可以进一步分类,比如有些会飞、有些会游,他分别把它们叫做鸟类、鱼类。于是他想,我何不单独造几台机器,专门用来制造某一类动物呢。于是它造出了Bird、Fish等机器。

接下来,在选择这些机器的模板对象时碰到一个问题:如果还像之前那样直接复制一个No. 1对象作为Bird、Fish的模板,那么结果就是这样的:

这样可不好。首先没体现出鸟类、鱼类跟动物的关系,其次它们的模板对象存了重复的东西,这可是一种浪费啊。怎么办呢?简单,让Bird和Fish的模板对象继承自Animal的模板对象就好了。就是说

Bird.prototype.__proto__ === Animal.prototype
Fish.prototype.__proto__ === Animal.prototype
ログイン後にコピー

于是:

用同样的方法,造物主造出了一个立体得多的JavaScript世界。

然而这样还不够。虽然那些纯对象现在充满了层次感,但是那些机器对象之间的关系还是扁平的:

那又该怎么办呢?其实用类似的办法就行了:

为了更方便地做到这一点,造物主发明了class关键字。

七. 世界最终的样子

经过一番折腾,JavaScript世界发生了大变化。变得丰富多彩,同时变得很复杂。用一张图再也没法画出它的全貌,只能画出冰山一角:

JavaScript的世界还在不断进化中……

 以上就是JavaScript世界万物诞生记的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles