プロトタイプとプロトタイプチェーンはJavaScriptにおいて難しく重要なポイントです。プロトタイプとプロトタイプチェーンを理解するには、次の記事が役立ちます。
プロトタイプとプロトタイプ チェーンについての理解がまだ非常に浅くて曖昧な段階にある場合は、私のこの記事を読んでみてください。少しでもお役に立てましたら、いいね、コメント、転送をお願いいたします。ご質問や疑問がございましたら、コメント欄にメッセージを残していただければ、できるだけ早く返信させていただきます。私の記事に知識の誤りがあると思われる場合は、お知らせください。間違っていることは理解できます。物事を正しいものに変えることは、私たちの業界にとって有益ですが、それは致命的です。
これまで面接でプロトタイプについてよく質問していましたが、常に知識の浅い曖昧な段階に留まり、忘れてしまうことも多かったです(これは誰でも同じだと思います、笑)。正月休みに(やっとキーボードを触った)、ステーションBのビデオを見て関連知識を取得し、ようやく全体を理解しました。ここではそれらを整理してまとめてみました。
わあ、ここで誓います、来週どんなに忙しくても、この記事を見直す必要があります。
otherwise
otherwise
ナゲッツには常にバグがあります。
まずは対応関係を知る
prototype
:プロトタイプ__proto__
:プロトタイプチェーン(リンクポイント)
-
所属関係
-
プロトタイプ
: 関数の属性->複雑に考えないでください、実際には普通のことですオブジェクト{} -
__proto__
: オブジェクトの属性 -> あまり複雑に考えないでください。実際には普通のオブジェクトです。{}
-
object
__proto__
はオブジェクトのコンストラクターを保持します。prototype
関数は特別なオブジェクトであるため、
__proto__
は関数でも使用されています。これは存在しており、function
Object はメソッド (コンストラクター)、
new Object はインスタンス オブジェクトです。 ! !
console.log(Object) //typeof Object ==='function' console.log(new Object) //typeof new Object ==='object'constructor
constructor は、インスタンス化されたオブジェクト
//test.constructor -> 实例化test对象的构造函数 Test console.log(test.constructor===Test) //true //这里个人理解为永无止境的自身调用自身,求解,没找到相关文章。 console.log(test.constructor.prototype.constructor===Test) //true console.log(test.constructor.prototype.constructor.prototype.constructor===Test) //true //constructor允许更改 function Test2() { this.a=123 } test.constructor=Test2 console.log(test)Prototype
function Test(){}
let test=new Test() //new完之后 test是个实例对象了
console.log(test.__proto__===Test.prototype) //根据上面的对应关系表 可以知道结果为true
//Test.prototype也是一个对象,所以他必须也得有__proto__
//Test.prototype.__proto__已经到达终点了,终点是什么,终点就是Object构造函数,所以下面结果为ture
console.log(Test.prototype.__proto__.constructor===Object)
//且 按照上面对应关系中的规则和上条的结果,下条结果也是ture
console.log(Test.prototype.__proto__===Object.prototype) //
//终点为null
console.log(Object.prototype.__proto__) //null
# のコンストラクターです。 ##プロトタイプ チェーンについて説明していただけますか。
オブジェクトの
__proto__ は、オブジェクトのコンストラクターの prototype
を保持します。prototype
もまた、オブジェクトなので、独自の __proto__
もあり、これはエンドポイント Object.__proto__
を行き来し、したがって __proto__
とのリンク ポイントを形成します。 key
) value は、コンストラクター メソッドの prototype
オブジェクトのチェーン (プロトタイプ チェーン) です。 <pre class='brush:php;toolbar:false;'>//__proto__
test{
b:333,
a:1,
__proto__:Test.prototype={
c:222,
b:2,
__proto__:Object.prototype={
c:3,
__proto__:null
}
}
}</pre>
特別な関数オブジェクト
キー ポイント: JS では、関数は特別なオブジェクトです。 ! !
記事冒頭の対応表を覚えておいてください
//函数是特殊对象 所以__proto__是存在的,且是个function console.log(Test.__proto__) //function console.log(Test.prototype) //objectTest
関数なので、最下層も new Function# で実装する必要があります##, then
//对象的__proto__保存着对象的构造函数的prototype console.log(Test.__proto__===Function.prototype) //true 这里是不是和关系表对应上了,能正常理解 const obj={} const obj2=new Object() console.log(Object) //function console.log(typeof Object) //'function'
Functionこれはコンストラクターなので、__proto__ と
prototype も必要です。はい、ただし、ここでの特別なポイントを覚えておく必要があります。
基礎となるルールは、
Function.__proto__===Function.prototype
Function 自体が構築されています。
//正常来说函数的Test.prototype应该是个object, //Function.prototype是个function,这也是一个特殊的点 typeof Test.prototype==='object' //true console.log(Function.__proto__) // 一个function console.log(Function.prototype) // 一个function //Function既然是函数对象_,那么他的_proto__就指向他的构造函数的prototype,也就是 //Function.__proto__===Function.prototype,自己调自己,这样理解是不是也没毛病。 console.log(Function.__proto__===Function.prototype) //true //Object既然是个构造方法,那么底层也是new Function console.log(Object.__proto__===Function.prototype) //true // 因为Function.__proto__===Function.prototype 所以下面代码是成立的 (Object.__proto__===Function.__proto__)===true
hasOwnProperty と in
hasOwnProperty#hasOwnProperty
は、オブジェクトであるかどうかを判断するために使用されます。それ自体のプロパティ (非プロトタイプ チェーンから継承)let test={ a:1, b:2 } Object.prototype.c=3 console.log(test.hasOwnProperty('a')) //true console.log(test.hasOwnProperty('b')) //true console.log(test.hasOwnProperty('c')) //false
in##in は、オブジェクトに次のものが含まれているかどうかを確認するために使用されます。特定の属性 (プロトタイプ チェーンの属性を含む)
console.log('a' in test) //true console.log('b' in test) //true console.log('c' in test) //true console.log('toString' in test) //true console.log('d' in test) //false
[関連する推奨事項: JavaScript 学習チュートリアル
以上がこの記事は、JavaScript のプロトタイプとプロトタイプ チェーンを理解するのに役立ちます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナント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はサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
