var ppElement=function(str_elmt){
this.tagName=(str_elmt==null)?"div":str_elmt;
}
ppElement.prototype={
constructor:ppElement,
ppCreate:function(){
return document.createElement(this.tagName);
},
ppAppend:function(){
var prntObj=arguments[0];
for(var i=1;i<arguments.length;i++){
prntObj.appendChild(arguments[i]);
}
}
};
/*=====================================*/
var ppLabel=function(str_txt){
this.text=str_txt;
}
ppLabel.prototype=Object.create(ppElement.prototype,{
constructor:ppLabel,
ppCreateLabel:{
value:function(){
var obj,txtObj;
ppElement.call(this);
obj=this.ppCreate();
txtObj=document.createTextNode(this.text);
this.ppAppend(obj,txtObj);
return obj;
}
}
});
/*=====================================*/
var tempObj=new ppLabel("Jeff");
tempObj.ppCreateLabel();
/*=====================================*/
このコードは、私が作成したものです。私はobject.createを使ってppLabelからppElementのメソッドを継承しようとしていました。私はobject.createについて少し混乱していました。私はobject.createで何が起こっているのか理解できませんでした。上記のコードは私のために働くが、私はそれを理解したい。より次のjavascriptコードを理解しようとしています
いくつかの質問:
この実装は、すべてのブラウザで動作していますか?
単一の派生クラスから2つの基本クラスを継承する方法はありますか?可能であれば、プロトタイプコンストラクタパターン(インターネット上でそれらを見つけ出し、そのパターンで上のコードを書いています)にそれらを実装する方法を教えてください。
このようなコードの記述は、パフォーマンスに影響しますか? (私はJavaScriptがプロトタイプ言語だと言われたのでこのパターンを選んだので、プロトタイプコンストラクタパターンにコードを書くことにしました)
私たちは
__proto__
を使用できますか?私は__proto__
の使用が推奨されていないことをインターネットで発見しました。
私のコードに間違ったことがあった場合は、それは本当に私にとって役に立ちます。
ありがとうございました!
大文字でコンストラクタ名を開始するのが一般的ですが、コードを理解しやすくなります。また、コンストラクタの関数式よりも関数宣言を使用することを検討してください。 * Object.assign *を使用して、置き換えるのではなく、デフォルトの* constructor.prototype *を拡張することを検討してください。おそらくこれは* codereview *のほうがいいでしょうか? – RobG
JavaScriptの専門家はまだいません。このリンクはお役に立ちます [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) これは基本的なJavaScriptのようですので、これはすべてのブラウザで機能するはずです。 2つの基本クラスからの継承は、私の視点からは大きなノー・ノーであり、トラブルにつながる可能性があります。 パフォーマンスについても知りません。___proto___について 一般的に、コードはよく見えますが、** TypeScript **を使用することを検討してください。コードを読みやすくしてJavaScriptに変換し、すべてのブラウザがサポートされるようにします。ずっといい! –
コンストラクタの名前を大文字で始めることを試みます。ありがとう@RobG –