[解決済み】プロトタイプは何のためにあるのか?[重複あり]
2022-04-04 04:44:07
質問
重複の可能性があります。
JavaScriptで'prototype'と'this'の使い分けは?
OK、私はJSにおけるOOPの考え方にやや慣れていないのです。
以下の2つのコードの違いは何ですか?
function animal(){
this.name = 'rover';
this.set_name = function(name){
this.name = name;
}
}
function animal(){
this.name = 'rover';
}
animal.prototype.set_name = function(name){
this.name = name;
}
どちらも同じことをするのだから、何が違うの?
どのように解決するのですか?
プロトタイプを使用すると、新しいオブジェクトを作成するたびに、プロトタイプ上のプロパティやメソッドを再作成する必要がないため、オブジェクトの作成が速くなります。
こうすると
function animal() {
this.name = 'rover'
this.set_name = function (name) {
this.name = name
}
}
は
set_name
メソッドは、動物を作成するたびに作成されます。しかし、これを実行すると
animal.prototype.set_name = function (name) {
this.name = name
}
このメソッドは毎回再作成する必要はなく、プロトタイプの一カ所に存在します。そのため
someAnimal.set_name("Ubu");
は
this
のコンテキストが設定されます。
someAnimal
と(唯一無二の)
set_name
メソッドが呼び出されます。
この方法で作成されたメソッドは、プライベートなデータにアクセスすることができます。
function animal() {
var privateData = 'foo'
this.name = 'rover'
this.set_name = function (name) {
this.name = name
alert(privateData) //will alert 'foo'
}
}
Douglas Crockford氏は、このように作成されたメソッドを「特権的」と呼んでいます。
関連
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで現在のURLを取得する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー