js_面向對象設計和行為委托設計模式
阿新 • • 發佈:2018-06-28
一行 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_面向對象設計和行為委托設計模式