對 JS 中的面向對象的基礎進行講述, 初體驗使用面向對象進行開發css
抽象性node
若是須要用一對象來描述一個數據, 那就須要抽取這個對象的核心數據來描述app
封裝性函數
封裝就是將數據和功能組合到一塊兒this
繼承性code
繼承性就是本身沒有, 別人有, 將別人的拿過來本身用, 而且成爲本身的對象
var o1 = { name : 'Jhon' }; var o2 = { age : 19 }; function mix(o1,o2){ for(var key in o2){ o1[key] = o2[key]; } } mix(o1, o2);
var div = document.createElement('div'); documet.appendChild(div); div.style.width = '200px'; div.style.height = '200px'; div.style.backgroundColor = 'red'; div.style.border = '10px dashed blue'; ...
function DivTag(){ // 注意這裏的 this 指的是 經過構造函數建立出來的實例對象 this.DOM = document.createElement('div'); appendTo : function(node){ // this是實例對象, 不是DOM節點, 不能直接使用DOM屬性和方法 node.appendChild(this.DOM); }; css : function(option){ for(var key in option){ this.DOM.style[key] = option[key]; } } } var divTag = new DivTag(); divTag.appendTo(document.body); divTag.css({ width : '200px', height : 200px, backgroundColor : 'red', border : '10px dashed blue' });
可是這樣也有缺點, 不能和 jQuery 同樣, 不能進行鏈式變成, 咱們能夠這樣修改, 在每個方法後面加上一個return this
繼承
function DivTag(){ // 注意這裏的 this 指的是 經過構造函數建立出來的實例對象 this.DOM = document.createElement('div'); appendTo : function(node){ // this是實例對象, 不是DOM節點, 不能直接使用DOM屬性和方法 node.appendChild(this.DOM); return this; }; css : function(option){ for(var key in option){ this.DOM.style[key] = option[key]; } return this; } } var divTag1 = new DivTag() .appendTo(document.body) .css({ width : '200px', height : 200px, backgroundColor : 'red', border : '10px dashed blue' }); var divTag2 = new DivTag() .appendTo(document.body) .css({ width : '400px', height : 400px, backgroundColor : 'pink', border : '10px dashed green' });
面向對象說白了就是對面向過程進行了封裝
好比說:
需求是 一個字符串是 str = 'abcdefg'
, 找到裏面的e
,並返回e
的索引索引
var str = 'abcdefg'; for(var i = 0;i < str.length;i++){ var char = str.charAt(i); if(char == 'e'){ conole.log(i); break; } }
indexOf
, 獲得索引var str = 'abcdefg'; console.log(str.indexOf('e'));
用生活中吃飯的的例子就能夠這樣理解:開發