1. 程式人生 > >js_面向對象設計和行為委托設計模式

js_面向對象設計和行為委托設計模式

一行 proto 是我 name 函數 自己 tostring rip 對象

最近換了新工作,面試過程中有多多少少的問題沒有給的出答案,為自己的技術短板而促急。

javascript中萬物皆對象(鍵:值構成的一種數據),暫且不討論這個句話的對與錯,可以想象對象在javascript中的重要性,而面向對象的設計模式更是走向高級前段開發的必須要技能。


創建對象的三種方式

字面量創建對象

1 //1.創建一個空對象
2 var obj = {};
3 
4 //2.obj對象添加屬性
5 obj.name = ‘obj‘;
6 //3.obj對象添加方法
7 obj.toString = function(str){
8     return str;
9 }

new + 構造函數創建對象

 1 //1.創建Base構造函數
 2 function Base(){
 3     console.log(888)
 4 }
 5 
 6 //2.使用new+Base()創建obj對象
 7 var obj = new Base();
 8 /*new具體做了下面三件事情
 9 var obj = {};
10 obj.__proto__ = Base.prototype;
11 Base.call(obj);
12 return obj;
13 第一行, 我們創建了一個空對象obj
14 第二行, 我們將這個空對象的__proto__成員指向了Base函數對象prototype成員對象
15
第三行, 我們將Base函數對象的this指針替換成obj, 然後再調用Base函數, 於是我們就給obj 16 對象賦值了一個id成員變量, 這個成員變量的值是” base”, 關於call函數的用法。 17 第四行,返回新的對象。 18 * */ 19 20 //3.給obj對象添加原型方法,註意這裏不是obj.prototype,而是Base.prototype。 21 Base.prototype.toString = function(){ 22 return this.id; 23 } 24 25 console.log(obj);

行為委托模式創建對象(Object.create())

 1 //1.創建一個行為對象foo
 2 foo = {
 3     init: function(who) {
 4         console.log(9999)
 5     },
 6     indentify: function() {
 7         console.log(8888)
 8     }
 9 };
10 //2.bar行為對象繼承foo行為對象(把foo行為對象委托給bar行為對象)
11 bar = Object.create(foo);
12 
13 //3.b1和b2繼承bar行為對象(把bar行為對象委托給b1和b2行為對象)
14 var b1 = Object.create(bar);
15 var b2 = Object.create(bar);
16 
17 
18 //上面的行為委托都是通過原型鏈的形式進行委托。
19 console.log(foo);
20 console.log(bar);
21 console.log(b1);

js_面向對象設計和行為委托設計模式