プロトタイプについて理解する
プロトタイプは、他のオブジェクトがプロパティの継承を実装できるオブジェクトです。どのオブジェクトも継承することができ、すべてのオブジェクトはデフォルトでプロトタイプを持ちます。プロトタイプ自体もオブジェクトであるため、各プロトタイプ自体がプロトタイプを持ちます。すべてのオブジェクトには、__proto__ として記録されるプロトタイプ属性があります。オブジェクトを定義するときは常に、その __proto__ 属性がそのプロトタイプを指します。例は次のとおりです。
var foo = { x: 10, y: 20 };
プロトタイプを指定しない場合でも、この属性は予約されます。明確なポインタがある場合、リンクされたリストは接続されます。プロトタイプ自体にもポインターがあり、これが最も高度な object.prototype であることに注意してください。例は次のとおりです。
var a = { x: 10, calculate: function (z) { return this.x + this.y + z } }; var b = { y: 20, __proto__: a }; var c = { y: 30, __proto__: a }; // call the inherited method b.calculate(30); // 60
プロトタイプの使用
プロトタイプの原理を理解した後、プロトタイプをどのように使用するか?言い換えれば、プロトタイプの役割は何でしょうか?
一般の初心者は、基本的な JavaScript 構文を学習した後、関数指向プログラミングを使用します。次のコード:
var decimalDigits = 2, tax = 5; function add(x, y) { return x + y; } function subtract(x, y) { return x - y; } //alert(add(1, 3));
は、各関数を実行して最終結果を取得します。しかし、プロトタイプを使用すると、コンストラクターを使用してコードの一部を最適化できます:
まず第一に、変数のみが関数本体に保存されます:
var Calculator = function (decimalDigits, tax) { this.decimalDigits = decimalDigits; this.tax = tax; };
具体的なメソッドはプロトタイプ属性を通じて設定されます:
Calculator.prototype = { add: function (x, y) { return x + y; }, subtract: function (x, y) { return x - y; } }; //alert((new Calculator()).add(1, 3));
この方法、インスタンスを使用できます。オブジェクトを変換した後、対応する関数操作を実行します。これは一般的な js フレームワークでも使用されている方法です。
プロトタイプのもう 1 つの機能は、継承 を実装することです。まず、親オブジェクトを定義します:
var BaseCalculator = function() { this.decimalDigits = 2; }; BaseCalculator.prototype = { add: function(x, y) { return x + y; }, subtract: function(x, y) { return x - y; } };
次に、子オブジェクトを定義し、子オブジェクトのプロトタイプが親要素のインスタンス化を指すようにします:
var Calculator = function () { //为每个实例都声明一个税收数字 this.tax = 5; }; Calculator.prototype = new BaseCalculator();
Calculator のプロトタイプが、順番に BaseCalculator のインスタンスを指すことがわかります。 Calculator を統合するには、add(x,y) とsubtract(x,y) という 2 つの関数があります。もう 1 つ言及すべき点は、そのプロトタイプは BaseCalculator のインスタンスであるため、作成した Calculator オブジェクトのインスタンスの数に関係なく、そのプロトタイプはすべて同じインスタンスを指します。
上記のコードを実行すると、Calculator のプロトタイプが BaseCalculator のインスタンスを指しているため、Calculator がそのコンストラクターで宣言された属性値にアクセスしたくない場合は、その DecimalDigits 属性値にアクセスできることがわかります。 BaseCalculator では、どうすればよいでしょうか? Calculator をインスタンスではなく BaseCalculator のプロトタイプに指定するだけです。コードは次のとおりです。
var Calculator = function () { this.tax= 5; }; Calculator.prototype = BaseCalculator.prototype;
サードパーティのライブラリを使用する場合、それらが定義するプロトタイプ メソッドがニーズを満たせない場合があるため、いくつかのメソッドを自分で追加できます。 コードは次のとおりです。
//覆盖前面Calculator的add() function Calculator.prototype.add = function (x, y) { return x + y + this.tax; }; var calc = new Calculator(); alert(calc.add(1, 1));
プロトタイプ チェーン
プロトタイプ。オブジェクトの親はオブジェクトの親を指し、親のプロトタイプは親の親を指します。このプロトタイプのレイヤーごとの関係は、プロトタイプ チェーンと呼ばれます。
オブジェクトのプロパティを検索する場合、JavaScript は、指定された名前のプロパティがプロトタイプ チェーンの先頭 (つまり、Object.prototype) と指定されたプロパティに到達するまで、プロトタイプ チェーンを上方向に走査します。がまだ見つからない場合は、未定義が返されます。
例は次のとおりです:
function foo() { this.add = function (x, y) { return x + y; } } foo.prototype.add = function (x, y) { return x + y + 10; } Object.prototype.subtract = function (x, y) { return x - y; } var f = new foo(); alert(f.add(1, 2)); //结果是3,而不是13 alert(f.subtract(1, 2)); //结果是-1
subtrace は上方参照の原則に従っていますが、add には事故があることがわかります。その理由は、 属性を検索するときに、まず自身の属性を検索し、そうでない場合はプロトタイプ を検索するためです。
Object.prototype と言えば、そのメソッドの 1 つである hasOwnProperty について触れなければなりません。これは、オブジェクトにプロトタイプ チェーンのプロパティではなくカスタム プロパティが含まれているかどうかを判断できます。これは、プロパティを処理しますが、プロトタイプ チェーンを検索しない JavaScript の唯一の関数です。使用コードは次のとおりです。
// 修改Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.hasOwnProperty('goo'); // true
プロトタイプ オブジェクトとインスタンスの間の関係を決定するには、isPrototyleOf メソッドを導入する必要があります。 デモは次のとおりです。
alert(Cat.prototype.isPrototypeOf(cat2)); //true
以上がJavaScript プロトタイプの深い理解 (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

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

ホットトピック



