1. 程式人生 > >javascript中面向物件的三大作用

javascript中面向物件的三大作用

面向物件的三大作用

作用1:封裝框架

我們可以定義一個物件,去封裝一些不同的功能,這樣,別人無需瞭解內部功能如何使實現的,只需要知道如何呼叫就可以了,這就是所謂的拿來主義。比如一個物件有不同的功能模組,用下面的簡單程式碼來說明。
var Ideal = function() {};
Ideal.prototype = {
  init:function(){
    this.run();
    this.do();
  },
  run:function(){console.log('run')},
  do:function(){console.log('do')}
}
var $ = new Ideal; // 其實這裡可以不加()
$.init();
其中run和do用來實現一些零碎的功能,作用比較單一,這樣做有一個好處就是解耦合,可以讓每個功能互不影響,排錯時也相對容易。而init可以用來組織這些零碎的功能,用於後來的元件化和模組化開發。這樣我們就簡單的封裝一個Ideal物件,來去實現不同功能。

作用2:描述資料

在前後臺互動中,有兩種情況:① 就是從後臺拿來資料,然後進行資料的處理 。② 就是我們處理好資料,把資料傳遞給後臺。

作用3:進行面向物件程式設計和資料繫結

用面向物件的方式程式設計,我們可以通過模組化方式來管理程式碼,使得功能更加易於維護,易於擴充套件,易於修改。當專案遇到需求變更的時候,可以更好的應對。一般我們面向物件程式設計都是開發網頁,基本都都會有這三個模組:init,bindDom,bindEvents。這三個分別是:init用於初始化資料,bindDom用於繫結資料到相應的html元素上,這樣我們就可以動態生成網頁。bindEvents用於繫結頁面中的一些 事件,用於事件的處理。其中我們需要單獨來說一下這個資料繫結,我們拿到後臺資料後,需要繫結到前臺的html元素上,這樣我們可以動態生成網頁。一般的繫結方式有:
① 資料拼接(引引加加法則) ② formateString  ③ 模板引擎         下面我們分別來說說這三種資料繫結方式。

① 資料拼接:(引引加加法則) 程式碼片段舉例如下:

html結構:
<div id="product">
</div>
JavaScript結構:
// 封裝的一個物件
var Product = function(data){
  this.data = data || {};
  this.config = {};
};
Product.prototype = {
  init:function(){
    this.bindDom();
    this.bindEvent();
  },
  bindDom:function(){
    this.config.eleId=document.getElementById('product');
    var str = '';
    str += '<div class="pName">'+ this.data.name +'</div>';
    str += '<div class="pPrice">'+ this.data.price +'</div>';
    str += '<div class="pDesc">'+ this.data.desc +'</div>';
    this.config.eleId.innerHTML = str;
  },
  bindEvent:function(){}
}

// 模擬假資料
var data = {"name":"橘子","price":"5元/斤","desc":"這種橘子很好吃!"};
// 建立一個物件例項
var p = new Product(data);
p.init(); // 初始化資料

② formateString 格式化字串,也就是用正則替換,程式碼片段舉例如下:

html結構:
<div id="str"></div>
JavaScript結構:
// 封裝的一個物件
var Person = function(data){
  this.data = data || {};
  this.config = {};
};
Person.prototype = {
  init:function(){
    this.bindDom();
    this.bindEvent();
  },
  bindDom:function(){
    this.config.eleId=document.getElementById('str');
    var str = "我有一個同學叫@(name),今年@(age)歲了";
    this.config.eleId.innerHTML = this.formateString(str,this.data);
  },
  bindEvent:function(){},
  formateString:function(str, data){
    return str.replace(/@\((\w+)\)/g, function(match, key){
        return data[key]
    })
  }
}
// 模擬資料
var data = {"name":"Tom","age":10};
// 例項化物件
var p = new Person(data);
p.init();

③ 模板引擎 (世面上有很多模板引擎,artTemplate,baiduTemplate,underscoreTemplate等等) 以artTemplate為例,程式碼片段如下:

html結構:
<div id="infoContent">
</div>
<!-- 下面是模板,需要有個id,並且script標籤的type的屬性值不能是 text/javascript -->
<script type='plain' id='tempId'>
  <div>姓名:{{name}}</div>
  <div>性別:{{gender}}</div>
  <div>年齡:{{age}}</div>
</script>
<!-- 引包 -->
<script src="artTemplate.js"></script>
JavaScript結構:
// 封裝的一個物件
var Info = function(data){
  this.data = data || {};
  this.config = {};
};
Info.prototype = {
  init:function(){
    this.bindDom();
    this.bindEvent();
  },
  bindDom:function(){
    this.config.eleId = document.getElementById('infoContent');
    var html = template('tempId',this.data);
    this.config.eleId.innerHTML = html;
  },
  bindEvent:function(){}
}
// 模擬假資料
var data = {"name":"Tom","gender":"man","age":20};
// 建立一個物件
var info = new Info(data);
// 初始化
info.init();