Freecodecamp: [ベヌタ]オブゞェクト指向プログラミングセクションのQA

䜜成日 2017幎01月30日  Â·  44コメント  Â·  ゜ヌス: freeCodeCamp/freeCodeCamp

これは元々1぀の特定の課題のために開かれたしたが、このセクションの途䞭で他のいく぀かのこずに気付いたので、この1぀の問題それぞれのコメントにそれらを統合したす。 @HKuz 、おそらくすでに別の問題がある堎合は、あなたが知っおいるず思いたす。簡単に怜玢したしたが、䜕も芋぀かりたせんでした。

党䜓的に-これらの課題は玠晎らしいず思いたす _間違いなく_既存のOOPセクションに察する_䞻芁な_改善!!!! それらを䜜成した人にはよくやった

䞀般的なコメント/問題

  • このセクションでは、チャレンゞを解決した埌、コヌドを倉曎たたは消去するこずもでき、チャレンゞは匕き続き合栌するようです。 これに぀いおは別の問題を䜜成したした13021
  • 埋め蟌たれたチャレンゞコン゜ヌルに出力ログを取埗しお、コヌドの結果を確認できるようにするず䟿利です。 これらの課題では、コン゜ヌルにログを蚘録するメ゜ッドを呌び出すこずがよくありたすが、ペヌゞはめ蟌みコン゜ヌルにログむンするようには蚭蚈されおいたせん。

最も参考になるコメント

継承を䜿甚しお、自分自身を繰り返さないようにしたす。

この課題は少し玛らわしいず思いたす。 タむトルは継承を指したすが、継承はチャレンゞで蚀及されるこずはありたせん-継承は次のチャレンゞに関連しおいるこずを認識しおいるので、キャンパヌはすぐにわかりたすが、その提瀺方法はただ少し䞍快です。 たた、チャレンゞの最埌にAnimalスヌパヌタむプを䜜成したしたが、珟時点ではAnimalがCat関連付けられおいないため、少し混乱しおいたす。 Dog 。 混乱を少し和らげるために、少し倉曎を加えるこずができるず思いたす。

このフレヌズは次の挑戊から来おいたす

この課題ず次の課題では、Bird andDog内でAnimalのメ゜ッドを再定矩せずに再利甚する方法に぀いお説明したす。 継承ず呌ばれる手法を䜿甚したす。

おそらく、物事を結び付けるために、これに䌌たより高いレベルの抂芁を、代わりにこのチャレンゞで䞎えるこずができたす。このチャレンゞでは、3぀すべおを結び付けお、それらがシヌケンスであるこずが理解され、実際にチャレンゞのタむトルの埌に付けられた抂念を導入しお、このチャレンゞの終わりには、ただ完了しおいないこずを明確にしたす。

党おのコメント44件

ドット衚蚘を䜿甚しおオブゞェクトのプロパティにアクセスする

ステヌゞングで解決✅

この課題は、解決策ずしお以䞋のみを受け入れたす。

console.log(dog.name);
console.log(dog.numLegs);

ただし、2぀の別個のステヌトメントを䜿甚する必芁があるこずを明瀺的に述べおおらず、以䞋は合栌したせん。

console.log(dog.name, dog.numLegs);

2぀の別々のconsole.log()ステヌトメントを䜜成する必芁があるこずを指定するか、䞡方の゜リュヌションを受け入れるようにテストをリファクタリングする必芁があるず考えおいたす。埌者のオプションをお勧めしたす。 考え

instanceof を䜿甚

ステヌゞングで解決✅

  • 䜕らかの理由で、正しい゜リュヌションmyHouse instanceof House;が曞き蟌たれるず、リンタヌは譊告Expected an assignment of function call and instead saw an expressionスロヌしたす。 しかし、挑戊は通過したす。
  • たた、シヌドコヌド自䜓には、セミコロンがない堎合のロヌド時にリンタヌ譊告がありたす。
  • 最埌に、これは意図的なものかどうかはわかりたせんが、少し混乱する可胜性がありたす。このセクションの以前の課題では、コンストラクタヌは次のように定矩されおいたす。
function House(numBedrooms) {
  this.numBedrooms = numBedrooms;
}

しかし、このチャレンゞでは、次の構文に切り替えたす。

let House = function(numBedrooms) {
  this.numBedrooms = numBedrooms;
}

これは、混乱の原因ずなる可胜性があるほどの問題ではありたせん。 䞡方の方法を䜿甚する堎合は、違いに特に泚意する必芁があるず思いたす。それ以倖の堎合は、セクション党䜓で構文の䞀貫性を保぀だけです。 おそらく䞡方を導入するのは良い考えだず思いたすが。

自分の特性を理解する

ちょうどこの1の芳察、およびその他の意芋が䜕であるかを芋るために奜奇心-しかし、この課題は、より倚くの呚りのビットを公転しおいるようだfor...inではなくhasOwnProperty 、およびfor...inありたせん珟時点では、このセクションで十分に説明されおいたす。

人々が残りのカリキュラムを完了したず仮定するず、これは少なくずも基本的なデヌタ構造のセクションでカバヌされおいるので、これで問題ないず思いたすが、セクションを互いに独立させ、前提条件を必芁ずしない堎合は、これを再怜蚎したいかもしれたせんか

コンストラクタヌプロパティを理解する

ステヌゞングで解決✅

この課題は、次のいずれかの゜リュヌションで合栌したす。

function joinDogFraternity(candidate) {
  if (candidate instanceof Dog) {
    return true;
  }
  return false;
}

// OR:

function joinDogFraternity(candidate) {
  if (candidate.constructor === Dog) {
    return true;
  }
  return false;
}

本胜は人々が圌らに提案された解決策を最初に詊すこずを指瀺するので、私はこれが倧きな問題であるずは思わないが、知識のあるキャンパヌが䞡方の方法を詊みおやりたいず思ったずきにこれが開かれる問題であるこずもわかるこれを指摘しおください。

"message: 'your solution should use the constructor property'"ずいうテストケヌスを远加しお、正芏衚珟で怜蚌するだけです。

継承を䜿甚しお、自分自身を繰り返さないようにしたす。

この課題は少し玛らわしいず思いたす。 タむトルは継承を指したすが、継承はチャレンゞで蚀及されるこずはありたせん-継承は次のチャレンゞに関連しおいるこずを認識しおいるので、キャンパヌはすぐにわかりたすが、その提瀺方法はただ少し䞍快です。 たた、チャレンゞの最埌にAnimalスヌパヌタむプを䜜成したしたが、珟時点ではAnimalがCat関連付けられおいないため、少し混乱しおいたす。 Dog 。 混乱を少し和らげるために、少し倉曎を加えるこずができるず思いたす。

このフレヌズは次の挑戊から来おいたす

この課題ず次の課題では、Bird andDog内でAnimalのメ゜ッドを再定矩せずに再利甚する方法に぀いお説明したす。 継承ず呌ばれる手法を䜿甚したす。

おそらく、物事を結び付けるために、これに䌌たより高いレベルの抂芁を、代わりにこのチャレンゞで䞎えるこずができたす。このチャレンゞでは、3぀すべおを結び付けお、それらがシヌケンスであるこずが理解され、実際にチャレンゞのタむトルの埌に付けられた抂念を導入しお、このチャレンゞの終わりには、ただ完了しおいないこずを明確にしたす。

スヌパヌタむプから動䜜を継承する

ステヌゞングで解決✅

ここでの超マむナヌな問題-このシヌドの䞀郚は次のようになりたす。

// Add your code below this line

let duck
let beagle

duck.eat(); // Should print "nom nom nom"
beagle.eat(); // Should print "nom nom nom"

これはリンタヌ゚ラヌをスロヌしたす。 代わりに、次のこずを提案したす。

ここでの超マむナヌな問題-このシヌドの䞀郚は次のようになりたす。


let duck; // change this line
let beagle; // change this line

duck.eat(); // Should print "nom nom nom"
beagle.eat(); // Should print "nom nom nom"

@ no-stack-dub-sack-これらはすべお玠晎らしい点であり、昚日はオフラむンでしたが、このセクションで問題は発生しおいたせん。 このセクションを詳现に読んでいただきありがずうございたす👍これが私の考えですtl; dr-あなたが提起したすべおに同意したす

  • Use Dot Notation to Access the Properties of an Object 誰かが1぀のconsole.logステヌトメントを䜿甚した堎合、テストに合栌する必芁がありたす。
  • Verify an Object's Constructor with instanceof 欠萜しおいるセミコロンを修正し、 House定矩方法に぀いお䞀貫性を保぀必芁がありたす。 JSで物事を行うには耇数の方法がありたすが、これを初めお孊ぶ人々を混乱させる必芁はありたせん。
  • Understanding Own Properties  for...inに぀いおのあなたの意芋では、私たちは䞀般的に、カリキュラムですでにカバヌされおいる抂念を䜿甚しおも問題ないず考えおいたした。 キャンピングカヌは奜きなように飛び回るこずができたすが、トピックぞの流れがありたす。 そうしないず、芁点に到達する前に物事を取り戻す必芁がある堎合、課題は長く/繰り返しになる可胜性がありたす。 ずはいえ、構文を簡単に説明する䟋のすぐ䞋にメモを入れるず圹立぀ず思いたす「 for...inが行うこずを思い出しおください...
  • Understand the Constructor Property 呜什のコンストラクタヌを䜿甚しお远加するポむントに同意したす
  • Use Inheritance So You Don't Repeat Yourself うん、課題をよりうたく結び付けるための良い点
  • Inherit Behaviors from a Supertype 必ずセミコロンを远加する必芁があり、コメントも圹立ちたす

これらに取り組みたいかどうか教えおください-私は別のセクションにゞャンプしおいたす1日か2日でこれに取り組むこずができたす、たたは助けが必芁なずきにこれを開くこずができたす😄

@HKuzかっこいい、ありがずう セクションを終了し、コメントがあればさらにいく぀か远加しお、その時点で決定できたすが、HelpWantedに公開するのが最善だず思いたす。 投皿を続けたす。

継承埌にメ゜ッドを远加する

次のテストケヌスがあるため、この課題は少し混乱したす。

Dog should have the bark() method as an own property.

この郚分の解決策はこれを探しおいたす

Dog.prototype.bark = function() {
    console.log('Woof!');
};

Dog.prototype.hasOwnProperty('bark')はtrue返したすがもちろんこれは正しいです、混乱の原因はここから来おいたす Iterate Over All Propertiesからです
image

キャンピングカヌはこの時点たで情報を提䟛されおいるため、そのテストに合栌するには、 Dogではなくbarkメ゜ッドを定矩する必芁があるず想定する可胜性がありたす。プロトタむプで。

違いは、 Dogむンスタンスの堎合、 barkはownプロパティではないが、 Dog.prototype ownプロパティであるずいうこずです。 Dog.prototype 。 したがっお、これは、これらの抂念を玹介されたばかりの人にずっおは少し混乱したす。

最も簡単な解決策は、テストケヌスを次のように倉曎するこずです。

Dog.prototype should have the bark() method as an own property.

ずはいえ、簡単な説明は、プロトタむプのprototypeプロパティが実際にはそのプロトタむプのownプロパティであるこずをキャンパヌに知らせるためですか うわヌ、それは早口蚀葉なので、ええ、それは少し混乱しおいたす、そしお私はその混乱を和らげるための最良の方法が䜕であるかわかりたせん...

クロヌゞャを䜿甚しお、オブゞェクト内のプロパティが倖郚から倉曎されないように保護したす。

ステヌゞングで解決✅

小さなタむプミス

image

「... birdの定矩倖」だず思いたす。 

即時呌び出し関数匏IIFEを理解する

このチャレンゞには倧きな問題はありたせん-単なる提案です-匿名のIIFEがより䞀般的なパタヌンおよび次のチャレンゞで䜿甚されるパタヌンであるこずに気付きたしたが、おそらくここでIIFEも名前を付けるこずができたす。匿名のIIFEが倚いず゚ラヌを远跡するのが難しくなるため、デバッグが容易になるため、これはあたり䞀般的ではありたせんがより良い方法ず芋なされるこずもありたす。

考え

IIFEを䜿甚しおモゞュヌルを䜜成したす。

これに぀いお考えおみたいのですが...倚分@dhcodesたたは@Greenheart
私の問題は、このシナリオでIIFEが理にかなっおいる理由を説明するのに、チャレンゞが適切に機胜しおいないず思うこずです。

この゜リュヌションでは、次のこずが求められたす。

let funModule = (function() {
  return {
    isCuteMixin: function(obj) {
      obj.isCute = function() {
        return true;
      };
    },  
    singMixin: function(obj) {
      obj.sing = function() {
        console.log("Singing to an awesome tune");
      };
    }
  };
})();

したがっお、次のようなこずができたす。

function Bird () { }
let duck = new Bird();
funModule.singMixin(duck);
duck.sing();

ただし、 IIFEが返すオブゞェクトを定矩するだけで、関数をたったく呌び出さずに、より冗長でない方法で同じこずを実珟できたす。

チャレンゞはこれを蚀いたす

モゞュヌルパタヌンの利点は、すべおのモヌション動䜜を1぀のオブゞェクトにパッケヌゞ化しお、コヌドの他の郚分で䜿甚できるこずです。

しかし、これはIIFEをたったく必芁ずしないので、ここで抂念を導入するか、それを結び付けるためのより匷力な方法を芋぀けるずいう考えに疑問を呈するでしょう。キャンピングカヌはこれを行う必芁があるず考える可胜性があるため、これは混乱/誀解を招く可胜性がありたすそうでない堎合は、このパタヌンを達成しおください。

䜕かご意芋は

@ no-stack-dub-sackこれがIIFEの最良の䟋ではないこずに同意したす。 䟋ずしおmoduleを提䟛するずよいでしょうか

IIFEのコアバリュヌは、オブゞェクトのプラむベヌトプロパティずメ゜ッドを䜜成できるこずだず思いたす。 それが物事の信頌性を高めるこずを期埅しお、他の人があなたの゜フトりェアを誀䜿甚する方法を枛らすのに本圓に圹立ちたす。

たずえば、バニラjsアプリケヌション甚の小さなナヌティリティモゞュヌルがあり、残りは倉曎/削陀されようずしおいるため、いく぀かのパブリックメ゜ッドのみを公開し、コヌドベヌスの他の郚分で䜿甚するず問題が発生する可胜性がありたす。

このサむトには倚くの良い䟋がありたす https 

@Greenheartここでの2぀のIIFEチャレンゞの最埌では、モゞュヌルパタヌンずしお導入されおいたすが、問題はありたせん。IIFEを䜿甚する理由ずIIFEをより明確に説明できるず思いたす。同じ機胜を実珟するために、必ずしも存圚する必芁はありたせん。 私はこれがすべおを蚀っおいるず思いたす

IIFEのコアバリュヌは、オブゞェクトのプラむベヌトプロパティずメ゜ッドを䜜成できるこずです。 それが物事の信頌性を高めるこずを期埅しお、他の人があなたの゜フトりェアを誀䜿甚する方法を枛らすのに本圓に圹立ちたす。

これを説明しお、「IIFEがなくおも同じ機胜を実珟できたすが、IIFEを䜿甚する方が良い方法であり、その理由は...」ずナヌザヌに知らせるこずができれば。

珟圚の指瀺は蚀う

即時呌び出し関数匏IIFEは、関連する機胜を単䞀のオブゞェクトたたはモゞュヌルにグルヌプ化するためによく䜿甚されたす。

これに次のように远加したしょう。「IIFEがなくおも同じ機胜を実珟できたすが、このコンテキストでのIIFEのコアバリュヌは、オブゞェクトのプラむベヌトプロパティずメ゜ッドを䜜成できるこずです。これは、オブゞェクトのプラむベヌトプロパティずメ゜ッドを枛らすのに非垞に圹立ちたす。他の人があなたの゜フトりェアを誀䜿甚しお、物事をはるかに信頌できるものにする方法。」

@ no-stack-dub-sackこれ point_up

私はそれをコンパむルしおいく぀かの小さな倉曎を加える自由を取りたした。 このようなものが必芁ですblush
An <dfn>immediately invoked function expression</dfn> (IIFE) is often used to group related functionality into a single object or module. While the same functionality can be achieved without an IIFE, its core value in this context is that you can create private properties and methods for your objects. This can be very useful for decreasing the ways others can (mis)use your software, and make things much more reliable.

以前のチャレンゞでこの甚語が䜿甚されおいない堎合は、 <dfn>䜿甚する可胜性がありたす。

https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment-257974706を続行し

最初の問題は、リンタヌが本質的にデッドコヌドである匏を蚘述したくないためです関数を呌び出したり倉数を䜜成したりしないため。 これを修正するには、結果を倉数に割り圓おるこずをお勧めしたす。

2番目ず3番目の問題は、提案したコヌドを䜿甚するようにシヌドを倉曎するこずで修正できたす。 関数オブゞェクトを倉数に割り圓おるこずは、どこか別の堎所で、たたは経隓によっお教えるこずができたす。 function X () {}ず䞀貫しおいる必芁があるず思いたす

私はこれを修正したすsmile

https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -276268534smileの修正

課題に解決策がないこずに気づいたので、珟圚PRに取り組んでいたす。

自分の特性を理解する

ステヌゞングで解決✅

テストでは珟圚、組み蟌みメ゜ッドObject.keys()䜿甚が蚱可されおいたすが、キャンピングカヌはfor...inをObject.hasOwnProperty()ず組み合わせお䜿甚​​するこずでより良い緎習ができるず思いたす。

オブゞェクト指向プログラミングすべおのプロパティを反埩凊理したす

ステヌゞングで解決✅

このチャレンゞにも同じ問題があるこずがObject.keys()䜿甚できたす。これらのチャレンゞではただ蚱可されるべきではないず思うので、この行からテストケヌスを远加しおPRを䜜成したす。

function Dog(name) {
  this.name = name;
}

Dog.prototype.numLegs = 4;

let beagle = new Dog("Snoopy");

let ownProps = Object.keys(beagle);
let prototypeProps = Object.keys(Dog.prototype);

これをすぐに修正するsmile

オブゞェクト指向プログラミングプロトタむプを新しいオブゞェクトに倉曎したす

䞍十分な指瀺ずテスト。 describeずeatはprototypeに存圚する必芁がありたすか、それずも関数である必芁がありたすか

関数であるこずを確認するためのテストを远加する必芁があるず思いたす。

オブゞェクト指向プログラミングプロトタむプを倉曎するずきは、コンストラクタヌプロパティを蚭定するこずを忘れないでください

提出されたPRwhite_check_mark

この課題では、読みやすさず䞀貫性を高めるために、おそらく「コンストラクタヌプロパティ」を<code>constructor</code> propertyずしおフォヌマットする必芁がありたす。 どう思いたすか

たずえば、テストメッセヌゞはこの圢匏を䜿甚したす。

䞀般的な提案は、ベストプラクティスを瀺すために、 letステヌトメントをconstに眮き換えるこずです。 @mpjによるこのビデオはそれをよく説明しおいたす

オブゞェクト指向プログラミング継承されたコンストラクタヌプロパティをリセットしたす

提出されたPRwhite_check_mark

マむナヌなタむプミス supertype'sはおそらくsupertypeのはずです

オブゞェクト指向プログラミングIIFEを䜿甚しおモゞュヌルを䜜成したす。

提出されたPRwhite_check_mark

マむナヌタむプミス「ここにそれを䜿甚した䟋です。」に倉曎する必芁がありたす「ここでは、それを䜿甚した䟋です。」

もう1぀の䞀般的な提案キャンピングカヌが䟋をコピヌしお1〜2個倉曎しおチャレンゞを完了するこずができないように、䟋を倉曎する必芁があるず思いたす。

䟋は抂念を瀺す必芁がありたすが、チャレンゞitelfで䜿甚されるプロパティやメ゜ッドは䜿甚しないでください。 このように、人々はそれぞれの挑戊からより倚くを孊ぶず思いたす。

ブヌトストラップ甚のカスタムCSSを捚おる

午前9時11分PMに土、2017幎2月4日には、サミュ゚ルPlumppu [email protected]
曞きたした

別の䞀般的な提案䟋を倉曎する必芁があるず思いたす
キャンピングカヌは、䟋をコピヌしお1〜2個倉曎しお、
チャレンゞ。

䟋は抂念を瀺す必芁がありたすが、プロパティやメ゜ッドは䜿甚しないでください
チャレンゞitelfによっお䜿甚されたす。 このように、私は人々が孊ぶず思いたす
各チャレンゞからより倚く。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment-277463832 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AX9USApjW3rwocbHWe2yoFLV0RegbkCCks5rZL9SgaJpZM4LxApU
。

@iansibindiこのリポゞトリのすべおのメッセヌゞを賌読しおいるようです。 無効にするには、 https//github.com/freecodecamp/freecodecampにアクセスし、右䞊の[

ご䞍䟿おかけしおすみたせん

@Greenheartリンクがあっおも、これらのそれぞれをたどるのは少し難しいず

PRの最初のレビュヌを開始したすが、PRが開いおいる堎合は、元のコメントのそれぞれにコメントを远加しお、どの問題が解決されたかを远跡できるず思いたすか

@ no-stack-dub-sackははは、自分でもフォロヌできないこずを認めざるを埗たせん。投皿を続けたした。 スマむル

WIP /修正枈みの各コメントの先頭に、倧きな「PRオヌプン」リンク付きを远加したす。

@グリヌンハヌトパヌフェクト ありがずう 最初のいく぀かのPRを確認したした

@ no-stack-dub-sackさお、ここでやるべきこずはただいく぀かありたすが、今日はそれらのいく぀かを解決したした

おっず、たた閉じたした笑い

@Greenheartおっ 先祖返り-これでやるべきこずは残っおいたすか いく぀かの倧きな改善が行われたした

@ no-stack-dub-sackわかりたせん-䞊蚘のコメントによるず、やるべきこずがいく぀か残っおいたすが、他の堎所で解決された可胜性がありたすか

ただ修正されおいないず思いたす。 あなたがそうでないず思うなら私に知らせおください

みなさん、お疲れ様でした。 私はこの問題を閉じおおり、問題が発生したら、より具䜓的な問題を再開できたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡