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個基類繼承?如果有可能的話,有人告訴我如何以prototype-constructor模式實現它們(我在互聯網上發現它們,並且我已經在該模式中編寫了上述代碼)。
這種寫代碼會影響性能嗎? (我選擇了這個模式,因爲有人說,JavaScript是原型的語言,所以我決定寫我的原型構造模式代碼)
我們可以使用
__proto__
?我在網上發現使用__proto__
已被棄用。
如果我在代碼中犯了什麼錯誤,請隨時說,這對我真的很有幫助。
謝謝!
約定以大寫字母開始構造函數名稱,這樣可以更容易理解代碼。另外,考慮使用函數聲明而不是構造函數的函數表達式。考慮使用* Object.assign *來擴展默認的* constructor.prototype *而不是替換它。 * codereview *可能更好? – RobG
我沒有JavaScript專家,所以也許這個鏈接將幫助你 [鏈接](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) 它看起來像基本的JavaScript,所以這應該適用於所有瀏覽器。 從我的角度來看,繼承2個基類是一個很大的禁忌 - 它可能只會導致麻煩。 不知道關於性能,關於___proto___ 一般來說,代碼看起來不錯,但........考慮使用** TypeScript **。它將使代碼更易於讀取,並將其轉換爲JavaScript,以支持所有瀏覽器。好多了! –
我會嘗試用大寫字母爲構造函數開始名稱。謝謝@RobG –