我不喜歡javascript的一件事是有數百種方法可以做事。我想知道的是,我如何申報班級?我使用函數()方法嗎?我打電話給Class.create()嗎?什麼是「標準做法」?聲明成員函數的'標準實踐'是什麼?我使用原型嗎?我使用myClass.method()嗎?最後,我該如何做基本的親子繼承?我問的原因是因爲在互聯網上我收到了很多方法來做這些事情。我想知道什麼是'標準做法'。如何在JavaScript中聲明父類和子類?
2
A
回答
1
在Javascript中聲明類,尤其是子類時沒有「標準實踐」的原因是,JavaScript實際上並沒有內置的語法支持,可以在C++中找到典型的類。相反,它有它自己的一竅門,用於生成類似的功能,並且有很多不同的方式來表達這些技巧。實際上沒有標準的方法。
我覺得最好使用一個更常見的JavaScript庫(jQuery,Prototype,YUI,Closure等),然後使用它們提供的子函數提供的函數,這將爲您提供您自己的「標準「這樣做的方式。如果你不想使用其中的一個庫,那麼你需要從某個地方借用一些代碼進行子分類(相當於YUI的extend()函數),然後決定要使用的風格。
我個人認爲這是Javascript在大型項目中的一個弱點,有多個人正在從事這些項目的項目或其他項目意圖由其他人擴展的項目,因爲沒有語言語法來聲明類和子類的「途徑」。相反,擁有一致的代碼庫的唯一方法是自己決定要使用的聲明風格,然後將其作爲項目中的編碼標準強制執行,就像使用支架樣式或縮進樣式。
1
我的建議是你讀Stoyan Stefanov的JavaScript Patterns。他詳細介紹了這一主題。我個人很喜歡Module Pattern。它減少了全球空間污染,並且易於使用。
編輯:實例化他們的 「類」 時
其他的答案離開了new
關鍵字。請參閱回答383503以獲得有關正確實例化JavaScript「類」的詳細討論。
1
絕對同意其他海報上沒有你所描述的「標準做法」。我將分享我現在使用的東西,這與道格拉斯克勞福德在他的書The Good Parts中使用的相似。我並不是說它是完美的,但是我很長時間都對這個問題感到沮喪,當我正在尋找以OOP方式組織JS代碼時,這對我來說工作得很好。
var ParentClass = function() {
var my = {}, // store private member variables and functions
that = {}; // store public member variables and functions
my.privateVar = 0;
that.publicVar = 7;
// this won't be visible outside of parent class,
// even to children unfortunately
my.getPrivateVar = function() {
return my.privateVar;
};
my.privateFunction = function() {
// do stuff
};
// this will be visible to children classes and anyone
// else using ParentClass
that.parentFunction = function() {
// here we can access private vars and functions
my.privateVar++;
my.privateFunction();
};
// and here we return the object that we created
// to store the public member variables and functions
return that;
};
var ChildClass = function() {
var my = {}, // more private vars and functions will live here
that = ParentClass(); // and here we subclass ParentClass;
// here define more public, private methods as before
that.childFunction = function() {
};
return that;
};
// test drive it
var cc = ChildClass();
cc.parentFunction();
cc.childFunction();
console.debug(cc.publicVar);
// console.debug(cc.privateVar); // undefined
相關問題
- 1. 如何在父類中聲明子類型?
- 2. 如何在Javascript中聲明類?
- 3. 聲明子類
- 4. JavaScript OOP類和聲明
- 5. 在子類中聲明類級變量
- 6. 在超類中聲明子類變量
- 7. 在Java中,爲什麼在父類和子類中聲明的變量在子類的實例中不可見?
- 8. 聲明在父類中,並在子中定義
- 9. Android在父類xml中聲明textview並在子類中設置偵聽器
- 10. 如何在Javascript中的子類中重載父類的方法?
- 11. 如何聲明泛型以便類和它的子類匹配
- 12. 父類和子類
- 13. 如何在子類中調用父類?
- 14. 在子類上聲明一個類別
- 15. JAXB編組聲明父類與實際運行時子類
- 16. 聲明爲父類調用子類方法的對象
- 17. 如何獲取在特定父類中聲明的方法?
- 18. c#聲明子類爲類型超類
- 19. 如何調用它?聲明一個父類,分配一個子類
- 20. C#父類和子類 - 從父類中挑選孩子
- 21. 用父類和子類聲明一個新對象的方法之一
- 22. 聲明父類和子類的方法,以確保它們一起運行
- 23. 聲明一個JavaScript類
- 24. 混淆Javascript類聲明
- 25. 難以理解如何在擴展類中聲明父類的函數?
- 26. 如何訪問JavaScript中子類中父類的方法
- 27. 繼承自模板類,在子類中聲明類型
- 28. 如何在類中聲明變量?
- 29. 如何在C++中聲明HashMap類型
- 30. 如何在類中聲明結構?
標準做法是JavaScript沒有類。 – kennebec