學習了一天的面向對象總結一下,共分為三類
- -! 老規矩 第一部分是概念性知識!!!
面向對象編程,我們可以把他想象成我們在造人。一個對象便是一個人,這個人有胳膊有腿,這便是一個對象的屬性或者方法。。然后再通過用戶的操作指令(click,hover等)來調用我們的js(我們制造的小人),控制我們的小人來執行不同的動作!
#_# 貌似我解釋的夠抽象。。。
當然了面向對象最大的優點就是復用性強、節省代碼、提高開發效率、下來來完成我的處女作文章。。。
1、工廠模式
- -# 學習了這個模式真的挺受教的,開始怎么寫都有錯誤,最后通過問了下朋友才弄明白,原來 下面的例子中 var obj = new Object();
這句話中的Object 是不可以改變的,他是js對象(我是這么認為的,如有不對請指出) 當然這句話也可以這么寫
var obj = {}; 或者 var obj = new function(){};
//從這幾種方式我想大家應該可以猜到我們var obj 只要是等於一個對象({})就是可以的。
1 function box(name,age,fuck){
2 var obj = new Object(); // windows 對象
3 obj.name = name;
4 obj.age = age;
5 obj.run = function (){
6 return fuck;
7 };
8 return obj;
9 };
10 var bb = box('小明','38','北京市');
11 console.log(bb.run()); //北京市
注: 工廠模式生產出來的實例不支持用 prototype 繼承!所以為了后期維護代碼,不建議經常使用。
看到一篇文章上說,不讓使用this 或者 new 的時候使用這種工廠模式。。。有點不懂,,什么情況會不能使用this 或者new 呢??
實在搞不懂這種寫法什么時候會用到。。。。好吧不糾結了。。知道這種寫法就好。。。。
2、構造函數
也是大家喜歡用的一種方式(更完美的是+原型模式混合着寫),
1 function dog(){
2 this.cat = 123;
3 this.mao = 456;
4 this.stu = function(){
5 console.log(this.mao);
6 }
7 };
8 //console.log(typeof dog);
3、原型模式 (繼續上面構造函數的例子)
1 dog.prototype.gou = function(){
2 console.log(this.mao);
3 };
4 var ani = new dog();
5 //ani.gou(); 456
6 //console.log(ani); dog {cat: 123, mao: 456, stu: function, gou: function}
2和3加起來就是個人認為就是完美的開放方式啦。。。。原型+構造函數。
第一次總結這么多。。想想還有些雞凍呢。。。如何說的不對的地方,還請指出。。
咦? 貌似面向對象還缺一部分吧。。。 貌似還有繼承。。除了繼承還有其他的嘛? 明天再研究。。。去吃飯。。。。