單例模式
對象數(shù)據(jù)類型的作用:
把描述同一個實物(同一個對象)的屬性和方法放在一個內(nèi)存空間下,起到了分組的作用,這樣不同事物之間的屬性即使屬性名相同, 相互也不會發(fā)生沖突
--- 這種分組編寫代碼的模式叫做: 單例模式
在單例模式中我們把person1或person2叫做"命名空間"
var person1 = {
name:"lilei",
age:18
}
var person2 = {
name:"hanmeimei",
age:16
}
單例模式是一種項目中經(jīng)常使用的模式, 因為項目中可以使用單例模式來進行"模塊化開發(fā)"
模塊化開發(fā): 對于一個相對來說比較大的項目, 需要多人協(xié)作的開發(fā)的, 我們一般情況下會根據(jù)當(dāng)前項目的需求劃分成幾個功能板塊, 每個人負責(zé)一部分, 同時開發(fā), 最后把每個人的代碼進行合并
var utils = {
select: function(){
}
}
var tabRender = {
change: function(){
utils.select(); // 在自己的命名空間下調(diào)用其他命名空間的方法
}
}
var searchRender = {
change: function(){
searchRender.clickEven(); // 在自己的命名空間下調(diào)用自己命名空間的方法
// this.clickEven()
}
clickEven: function(){
}
}
工廠模式
// 單例模式
var jsPerson1 = {
name:'lilei',
age:18,
writeJs: function(){
console.log("my name is " + this.name + ",I can write JS!")
}
}
jsPerson1.writeJs();
var jsPerson2 = {
name:'hanmeimei',
age:16,
writeJs: function(){
console.log("my name is " + this.name + ",I can write JS!")
}
}
jsPerson2.writeJs();
// ...
單例模式
雖然解決了分組的作用,但是不能實現(xiàn)批量的生產(chǎn),屬于手工作業(yè)模式, 引出-> "工廠模式
"
把實現(xiàn)同一件事情的相同的代碼放到一個函數(shù)中, 以后如果再想實現(xiàn)這個功能, 不需要重新的編寫這些代碼了, -> "函數(shù)的封裝
"
-->低耦合高內(nèi)聚
: 減少頁面中的冗余代碼,提高代碼的重復(fù)利用率
function createJsPerson(name,age){
var obj = {};
obj.name = name;
obj.age = age;
obj.writeJs = function(){
console.log("my name is "+ this.name +", I can write JS!");
}
return obj;
}
var p1 = createJsPerson('lilei',18);
p1.writeJs();
var p2 = createJsPerson('hanmeimei',16);
p1.writeJs();
js是一門輕量級的腳本"編程語言"(html+css不屬于編程語言,屬于標記語言)
所有的編程語言都是面向?qū)ο箝_發(fā)的 -> 類的繼承, 封裝, 多態(tài)
繼承
: 子類繼承父類中的屬性和方法
多態(tài)
: 當(dāng)前方法的多種形態(tài)(在后臺語言中: 多態(tài)包含重載
和重寫
)
重載
: js中不存在重載, 方法名一樣的話, 后面的會把前面的覆蓋掉,最后只保留一個;(js中有一個操作類似重載但不是重載:我們可以根據(jù)傳遞的參數(shù)不一樣,實現(xiàn)不同的功能)
function sum(num){
if(typeof num === "undefined"){
return 0;
}
return num;
}
sum(100);
sum();
重寫
: 子類重寫父類的方法