欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入php面向?qū)ο蟆⒛J脚c實(shí)踐

 更新時(shí)間:2016年02月16日 23:26:04   投稿:mdxy-dxy  
這篇文章主要介紹了深入php面向?qū)ο?、模式與實(shí)踐,需要的朋友可以參考下

1 語法

1.1 基礎(chǔ)語法

clone

需要操作原對(duì)象,但又不想影響原對(duì)象.

復(fù)制代碼 代碼如下:

$K_back = clone $K;

基本數(shù)據(jù)類型和數(shù)組都為真復(fù)制,即為真副本,當(dāng)屬性為對(duì)象時(shí),為假復(fù)制,改變副本仍會(huì)影響原對(duì)象.解決方案:

//在原對(duì)象中添加
function __clone(){
  $this->對(duì)象 = clone $this->對(duì)象
} 

__clone在clone前自動(dòng)觸發(fā),可以執(zhí)行一些在備份前的屬性操作.

2、&傳遞引用

方法引用傳遞,改變?cè)磳?duì)象

復(fù)制代碼 代碼如下:

function set_K(& $K){...}
function & get_K(){...}

3、static延遲靜態(tài)綁定

應(yīng)用場(chǎng)景:Dog類和Person類都需要一個(gè)返回實(shí)例化的方法,Dog類和Person類都繼承于Animal抽象類.

abstract class Animal{
  public static function create(){
    //實(shí)例化調(diào)用類
    return new static();
  }
}

class Person extends Animal{...}

//返回Person實(shí)例化類
Person::create();

4、攔截器

__get($property),訪問未定義的屬性時(shí)調(diào)用.
__set($property,$value),給未定義的屬性賦值時(shí)被調(diào)用.
__isset($property),對(duì)未定義屬性調(diào)用isset()方法時(shí)調(diào)用.
__unset($property),對(duì)未定義屬性調(diào)用unset()方法時(shí)調(diào)用.
__call($method,$arg_array),調(diào)用未定義方法時(shí)調(diào)用.
__call很有用,但要慎用,因?yàn)樘`活.
應(yīng)用場(chǎng)景:有一個(gè)專門打印Person類信息的Person_Writer類,如果通過Person類調(diào)用Person_Writer類.

//Person委托Person_Writer類處理打印事務(wù).
class Person {
  private $writer;
  ...

  function __call($method_name,$args){
    if(methood_exists($this->wirter,$method_name)){
      return $this->writer->method_name($this);
    }
  }

  //高級(jí)__call寫法,當(dāng)委托方法參數(shù)不確定時(shí)使用.
  function __call($method_name,$args){
    //當(dāng)然這里這樣寫法意義不大,但是call一般都是用call_user_func_array調(diào)用
    $args = $this ;
    if(methood_exists($this->wirter,$method_name)){
      return call_user_func_array(
        array($this->writer,$method_name),$args);
      )
    }
  }

} 

5、回調(diào)函數(shù)

應(yīng)用場(chǎng)景: 3個(gè)類,Product類,Product_Sale類,Product_Totalizer類,要實(shí)現(xiàn):當(dāng)賣出Product總共價(jià)格超過指定金額時(shí),輸出警告.

//Product
class Product {
  public $name;
  public $price;
}

//Product_Sale
class Product_Sale {
  private $callbacks;

  //記錄回調(diào)函數(shù)
  function register_callback ($callback) {
    if(! is_callback($callback)){
      thow new Exception('callback not callable');
    }
    $this->callbacks[] = $callback;
  }

  //執(zhí)行回調(diào)函數(shù)
  function sale ($product){
    print "{$product->name} : 處理中 \n";
    foreach($this->callbacks as $callback){
      call_user_func($callback , $product);
    }
  }
}

//Produce_Totalizer
class Produce_Totalizer {
  static function warn_amount ($amt) {
    $count = 0;
    return function ($produce) use ($amt , &count) {
      $count += $produce->price;
      print " count : {count}\n"
      if($count>$amt){
        print "超過指定金額{$amt}啦~";
      }
    };
  }
}

//模擬場(chǎng)景
$product_sale = new Produce_Sale();
//指定報(bào)警金額為8塊
$product_sale = register_callback(Produce_Totalizer::warn_amount(8)); 

//賣商品
$product_sale->sale(new Product("Durex",6));
$product_sale->sale(new Produce("Jissbon",5));

//輸出結(jié)果
Durex : 處理中
  count :6 

Jissbon : 處理中 
  count: 11

超過指定金額8塊啦~

6、get_class()和instanceof

get_class(類)用于判斷是否精準(zhǔn)等于類名;

instanceof 可以判斷是否其本身或繼承于某父類.

7、類中的方法和類中的屬性

復(fù)制代碼 代碼如下:

get_class_methods('類名'):獲取類中所有方法.
get_class_vars('類名'):獲取類中所有public參數(shù);

8、反射API

2 模式

2.1 組合

問題:課堂類被演講類和研討會(huì)類繼承著.但是演講類和研討類都要實(shí)現(xiàn)一次性計(jì)費(fèi)和上N次課計(jì)費(fèi)的方法.和輸出計(jì)算的方式.

解決方案1: 在課堂類中添加計(jì)算一次性付費(fèi)的方法,上N次課的計(jì)費(fèi)方法和輸出計(jì)算方式的方法.

解決方案2: 運(yùn)用組合,將處理計(jì)費(fèi)和輸出計(jì)算方式單獨(dú)封裝為一個(gè)計(jì)費(fèi)策略類.

組合模式

abstract class Cost_Strategy {
  protected $duration;
  abstract function cost ();
  abstract function charge_type();

  public __construct($duration){
    $this->duration = $duration;
  }
}

class Timed_Const_Strategy extends Cost_Stratedy {
  function cost () {
    //上一次課給5塊錢- -.
    return $this->duration * 5;
  }

  function charge_type(){
    return "多次課結(jié)算";
  }
}

class Fixed_Const_Strategy extends Cost_Stratedy {
  function cost (){
    return 30 ;
  }

  function charge_type(){
    return "一次性課結(jié)算";
  }
}

abstract class Leason {

  private $cost_strategy;

  public __construct(Const_Strategy $cost_strategy){
    $this->cost_strategy = $cost_strategy;
  }

  function __call($method_name,$args){
    $args = $cost_strategy ;
    if(methood_exists($this->cost_strategy,$method_name)){
      return call_user_func_array(
        array($this->writer,$method_name),$args);
      )
    }
  }
}

//運(yùn)用
$leasons[] = new Seminar(new Timed_Const_Strategy(4));
$leasons[] = new Lecture(new Fixed_Const_Strategy(null));

foreach ($leasons as $leason){
  print "leason charge : {$leason->const()}";
  print "charge_type : {$leason->charge_type()}"
}

leason charge 20. charge_type : 多次課結(jié)算;
leason charge 30. charge_type : 一次課結(jié)算;

組合既委托.同級(jí)委托.

繼承既父子關(guān)系.

3 生成對(duì)象
3.1 單例模式

確保系統(tǒng)中只有唯一一個(gè)用例.例如系統(tǒng)配置文件.

重點(diǎn)

1: 構(gòu)造方法私有.

2: 類本身包含自己的實(shí)例化屬性.

單例模式

class Preferences {
  private static $instance;
  private function __construct(){ ... }

  public static function get_instance(){
    if(empty(self::$instance)){
      self::$instance = new Preferences();
    }
    return self::$instance;
  }
  ...
}

//使用
$preferences = Preferences::get_instance();

3.2 工廠模式

通過一個(gè)父類,生產(chǎn)處多個(gè)不同功能的子類.

特點(diǎn):產(chǎn)品方(新浪微博)和需求方(顯示新浪微博)一一對(duì)應(yīng).

問題:印象筆記中,來源可能為新浪微博,或者開發(fā)者頭條,在印象筆記顯示的時(shí)候,兩者的頁眉和頁尾是不一樣的.

工廠模式

3.3 抽象模式

RLGL!!!.印象筆記不只要顯示新浪微博內(nèi)容!!!還要顯示我的新浪賬號(hào),還要該微博啊!!臥槽~憋著急,吻我.

工廠模式主要用于生產(chǎn)一一對(duì)應(yīng)的產(chǎn)品方和需求方,而抽象模式要做的是一個(gè)需求方(印象筆記_顯示新浪微博),要多個(gè)工廠(把需求方抽象為多個(gè)需求方),例如提供新浪內(nèi)容的工廠,提供新浪賬號(hào)的工廠.提供微博內(nèi)容的評(píng)論的工廠等.

抽象模式

代碼:

abstract class Show_Evernote {
  abstract function get_header_text();
  abstract function get_context();
  abstract function get_footer_text();
  abstract function get_user();
  abstract function get_comment();

}

class 顯示新浪微博 extends Show_Evernote{
  function get_header_text(){...};
  function get_context(){new 新浪微博_內(nèi)容;}
  function get_footer_text(){...};
  function get_user(){new 新浪微博_賬號(hào) ;}
  function get_comment(){new 新浪微博_評(píng)論;}
}

//使用
印象筆記控件類->內(nèi)容 = 顯示新浪微博->get_context;
印象筆記控件類->賬號(hào) = 顯示新浪微博->get_context;
...

3.4 平行模式

當(dāng)使用工廠/抽象模式必須要制定具體的創(chuàng)建者(需求方).

平行模式和抽象模式的模型圖一致,但代碼實(shí)現(xiàn)不一樣.

抽象模式中父類均為抽象類,而平行模式中,所以類都為普通類,方便父類的實(shí)例化.

在這里列出顯示印象筆記類的實(shí)現(xiàn)代碼

class Show_Evernote{
  private $內(nèi)容;
  private $賬號(hào);
  private $評(píng)論;

  function __construct(內(nèi)容,賬號(hào),評(píng)論){
    $this->內(nèi)容 = 內(nèi)容;
    $this->賬號(hào) = 賬號(hào);
    $this->評(píng)論 = 評(píng)論;
  }

  function get_內(nèi)容(){
    return clone $this->內(nèi)容);
  }

  function get_賬號(hào)(){
    return clone $this->賬號(hào));
  }

  function get_評(píng)論(){
    return clone $this->評(píng)論;
  }
}

//使用
$factory = new Show_Evernote( 
  new 新浪微博內(nèi)容(),
  new 新浪微博賬號(hào)(),
  new 新浪微博評(píng)論()
);

印象筆記控件類->顯示印象筆記 = $factory;

其實(shí)大家可以發(fā)現(xiàn),原型模式只不過只在最頂層類中包裝了一下各組件子類而已,然而這樣可以輕松的組合他們,例如實(shí)現(xiàn)一個(gè)顯示新浪微博內(nèi)容,但要顯示開發(fā)者頭條賬號(hào)的需求?

4 使用對(duì)象
4.1 組合模式

組合模式,可以理解為單一對(duì)象管理組合對(duì)象(聚合組件),最終組合體下的各個(gè)組合部件最好類型一致.不然特殊性越多,需要判斷就越多.

假設(shè)捶背男,洗腳男,洗發(fā)男,用來服務(wù)一個(gè)人(妹子).

假設(shè)妹子的幾個(gè)部位可用的服務(wù)男均為無限個(gè).

組合模式

//創(chuàng)建一個(gè)妹子
$妹子 = new 人();

//添加洗腳男、捶背男
$妹子->add_man(new 洗腳男);
$妹子->add_man(new 捶背男);

//循環(huán)所有男的給予舒服的方法.
$妹子->計(jì)算舒服程度();

這是一個(gè)很理想的組合模式,在現(xiàn)實(shí)情況,我們使用組合模式,可能不得不創(chuàng)建多種類型的洗腳男,需要添加許多判斷條件.

4.2 裝飾模式

裝飾模式,首先洗腳男,洗發(fā)男,捶背男都是人,但是如果,一個(gè)男的又捶背,又洗發(fā),這怎么玩?.add_man兩次?這不科學(xué)吧,來給這些男的裝飾一下吧~

裝飾模式

abstract class 人{(lán)
  ...
  abstract function get_well();
}  

class 男 extends 人 {
  //無論你是神馬男,服務(wù)你,你就能獲得10點(diǎn)舒服度.
  private $well = 10;
  function get_well(){
    return $this->well();
  }
}

abstract class 裝飾男類型 extends 人 {
  protected $人;
  function __construct(人 $人){
    $this->人 = $人;
  } 
}

class 捶背裝飾 extends 類型男裝飾{
  function get_well(){
    return $this->人->get_well()+30;
  }
}

class 洗發(fā)裝飾 extends 類型男裝飾{
  function get_well(){
    return $this->人->get_well()+20;
  }
}

class 洗褪裝飾 extends 類型男裝飾{
  //老子不喜歡別人碰我的毛褲.
  function get_well(){
    return $this->人->get_well()-20;
  }
}

//創(chuàng)建捶背,能給予的舒服指數(shù) - -嘻嘻.
$人 = new 捶背裝飾(new 男);
$人->get_well(); // 10+30 = 40

//來來來,全能選手,捶背、洗發(fā)、洗腿一起來
$人 = new 洗腳裝飾(new 洗發(fā)裝飾(new 捶背裝飾(new 男()))); //10+30+20-20 = 40,注意順序,由里到外執(zhí)行.

裝飾模式,既(組合+繼承),基類方法一定要盡量少,不然子類可能有它不該有的方法.直接類繼承,她只可能是一種形態(tài),而她的多種形態(tài)可能一并擁有的時(shí)候,應(yīng)該運(yùn)用組合.

繼承即單一多態(tài),組合既多種多態(tài).

這個(gè)例子中,你可以添加女,然后把裝飾男類型改為裝飾通用類型,但每個(gè)get_well()都要多一個(gè)判斷是男還是女(如果給予的舒服程度不一樣).

這只是確保不可能出現(xiàn)在男,女之外的第三種人,如果基類為動(dòng)物,給予服務(wù)的可能是雞,鵝,鴨,那么裝飾類型應(yīng)該運(yùn)用工廠模式,動(dòng)物形態(tài)和裝飾形態(tài)一一對(duì)應(yīng).方便拓展.

除了服務(wù)類型,服務(wù)男的樣子也很重要,這就多了一種裝飾,現(xiàn)在有裝飾男類型和相貌男類型,這種情況怎么破,其實(shí)類似.兩個(gè)裝飾

復(fù)制代碼 代碼如下:

//如何獲取捶背的帥哥麥?,
$人 =new 男類型(new 捶背(new 帥哥麥(new 男())));

4.3 外觀模式

即給外部系統(tǒng)提供清晰接口

例如當(dāng)Model層寫得很混亂,但是里面的方法還能用,那我們的Controller層應(yīng)該列舉一些清晰的訪問方法來供View層訪問.外觀模式,強(qiáng)調(diào)的是清晰的訪問接口.

5 執(zhí)行任務(wù)
5.1 策略模式

給類添加功能.對(duì)象要顯式的調(diào)用它.

繼續(xù)剛才的洗腳男和人的故事吧...你丫的爽完了要給錢吧?支付寶?微信?現(xiàn)金?

這個(gè)付款方式有多種,實(shí)現(xiàn)方法不應(yīng)該放在人類中,而是應(yīng)該委托給別的類

abstract class 人 {

  protectd $支付方式;

  function set_支付方式(){...}

  function 付款(金額){
    return $支付方式->付款($金額);
  }
}

abstract class 付款{
  abstract function 付款($金額);
}

class 支付寶付款 extends 付款{

  function 付款($金額){
    return 外接支付寶付款流程($金額);
  }
}
...

//使用
$男 =new 男();

///爽爽爽
...

//結(jié)賬
$支付寶支付賬單 = new 支付寶付款($金額);
$人 = new 男();
$人->set_支付方式(new 支付寶付款());
$人->付款();

5.2 觀察者模式

當(dāng)被觀察者發(fā)生變化,觀察者需要被通知.

當(dāng)數(shù)據(jù)發(fā)生變化,頁面需要被通知.

使用步驟:

觀察者加載到被觀察者中.
被觀察者通知觀察者.

觀察者模式

例如登陸類(被觀察)狀態(tài)改變,要出發(fā)郵件系統(tǒng)和日志系統(tǒng)(觀察者)

interface 被觀察者{
  function attach(觀察者);
  function detatch(觀察者);
  function notify();
}

class Login implements 被觀察者{
  private $觀察者;

  function __construct(){
    $this->觀察者 = array();
  }

  function attach($觀察者){
    $this->觀察者 = $觀察者; 
  }

  function detach($觀察者){
    //刪除某個(gè)觀察者的操作;
  }

  function notify(){
    foreach ($this->觀察者 as $單個(gè)觀察者){
      $單個(gè)觀察者->update($this);
    }
  }    
}

interface 觀察者{
  function update(被觀察者);
}

abstract class Login_觀察者 implements 觀察者{
  private $login;
  function __construct (Login $login){
    $this->login = $login;
    $login->attach($this);
  }

  function update(觀察者 $觀察者){
    if ($觀察者 ===$this->login){
      $this->do_update($觀察者);
    }
  }
  abstract function do_update(Login $login);
}

class 郵件觀察者 extends 登陸觀察者 {
  function do_update(Login $login){
    //判斷條件 發(fā)送郵件
  }
}


class 日志觀察者 extends 登陸觀察者 {
  function do_update(Login $login){
    //判斷條件 記錄到日志;
  }
}

//使用
$login = new Login();
new 郵件觀察者 ($login);
new 日志觀察者 ($login);

PHP有內(nèi)置的SPL實(shí)現(xiàn)上述的觀察者模式.

5.3 訪問者模式

問題: 在一個(gè)軍隊(duì)中,有很多軍隊(duì),軍隊(duì)下面可能包含軍隊(duì)/步兵/弓箭手,這時(shí)我們要顯示一個(gè)軍隊(duì)的戰(zhàn)斗力/需要糧食的各級(jí)分配?(遍歷對(duì)象并設(shè)置顯示方法).怎么辦?.解決辦法是軍隊(duì)還是保存自己的基本信息,設(shè)置一個(gè)訪問者,訪問者包含總戰(zhàn)斗力方法和總糧食的方法.

訪問者模式

訪問者

abstract class 軍隊(duì)訪問者{
  abstract function 訪問(單元);

  function 訪問軍隊(duì)($軍隊(duì)){
     $this->訪問($軍隊(duì));
  }
  function 訪問弓箭手($弓箭手){
    $this->訪問($弓箭手);
  }

  //這里重復(fù)定義了大量代碼,其實(shí)可以用call來替代
  function __call($method_name,$args){
    if(strrpos($method_name, "訪問")){
      return call_user_func_array(
        array($this,"訪問"),$args
      );
    }
  }
}

class 軍隊(duì)?wèi)?zhàn)斗力訪問者 extends 軍隊(duì)訪問者{
  private $text="";

  function 訪問($單元){
    $ret = "";
    $pad = 4*$單元->getDpth(); //設(shè)置顯示深一級(jí)前面多4個(gè)空格.
    $ret .= sprintf( "%{$pad}s","");
    $ret .= get_class($單元). ": ";
    $ret .= "戰(zhàn)斗力: " .$單元->bombardStrenth()."\n";
    $this->text .=$ret;
  }

  function get_text(){
    return $this->text;
  }
}

被訪問者

abstract class 單元{
  function 接受($軍隊(duì)訪問者){
    $method = "訪問_".get_class($this);
    $軍隊(duì)訪問者->$method($this);
  }

  private $depth;
  protected function set_depath($depth){
    $this->depth=$depth;
  }

  function get_depth(){
    return $this->depth;
  }
  ...
}

abstract class 綜合單元 extends 單元{
  function 接受($軍隊(duì)訪問者){
    parent::接受($軍隊(duì)訪問者)
    foreach($this->單元集合 as $this_unit){
      $this->unit->接受($軍隊(duì)訪問者);
    }
  }
}

class 軍隊(duì) extends 綜合單元{
  function bombardStrenth(){
    $ret =0;
    foreach($this-units() as $unit){
      $ret += $unit->bombardStrenth();
    }
    return $ret
  }
}

class 弓箭手 extends 單元{
  function bombardStrenth(){
    return 4;
  }
}

調(diào)用

$main_army = new Army();
$main_army->add_unit(new 步兵());
$main_army->add_unit(new 弓箭手());

$軍隊(duì)?wèi)?zhàn)斗力訪問者_(dá)實(shí)例 =new 軍隊(duì)?wèi)?zhàn)斗力訪問者();
$main_army->接受(均分戰(zhàn)斗力訪問者);
print $軍隊(duì)?wèi)?zhàn)斗力訪問者->get_text();

輸出

復(fù)制代碼 代碼如下:

軍隊(duì): 戰(zhàn)斗力: 50
    步兵: 攻擊力 :48
    弓箭手: 攻擊力: 4

5.4 命令模式

例子為Web頁面的login和feed_back,假如都需要使用ajax提交,那么問題來了,將表單封裝好提交上去,得到了返回結(jié)果.如何根據(jù)返回結(jié)果跳轉(zhuǎn)不同的頁面?.

有些同學(xué)就說了,login和feed_back各自寫一個(gè)方法憋,提交的時(shí)候調(diào)用各自的方法.

然后再來個(gè)logout命令..增加..刪除..命令怎么辦..

命令模式比較適合命令執(zhí)行例如登陸,反饋等簡單只需要判斷是否成功的任務(wù)

命令模式

命令:

abstract class Command{
  abstract function execute(Conmmand_Context $context);
}

class Login_Command extends Command{
  function execute(CommandContext $context){
    $managr =Register::getAccessManager();
    $user = $context->get("username");
    $pass = $context->get('pass');
    $user_obj = $manager->login($user,$pass);
    if(is_null($user_obj)){
      $context->setError($manager->getError());
      return false;
    }
    $context->addParam("user",$user_obj);
    return true;
  }
}

部署命令的調(diào)用者

class Command_Facotry{
  public function get_command($action){
    $class = UCFirst(strtolower($action))."_Command";
    $cmd = new $class();
    return $cmd;
  }

}

客戶端

class Controller{
  private $context;
  function __construct(){
    //Command_Context主要用來存儲(chǔ)request和params
    $this->context =new Command_Context();
  }
  function process(){
    $cmd Command_Factory::get_commad($this->context->get('action'));
    if(!$cmd-execute($this->context)){
      //錯(cuò)誤處理
    }else{
      //成功 分發(fā)視圖
    }
  }
}

使用

$controller =new Controller();
$context = $controller->get_context();
$context->add_param('action','login');
$context->add_param('username','404_k');
$context->add_param('pass','123456');
$controller->process();

相關(guān)文章

  • 基于JavaScript定位當(dāng)前的地理位置

    基于JavaScript定位當(dāng)前的地理位置

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript定位當(dāng)前的地理位置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • js原生日歷的實(shí)例(推薦)

    js原生日歷的實(shí)例(推薦)

    下面小編就為大家?guī)硪黄猨s原生日歷的實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • JavaScript腳本性能優(yōu)化注意事項(xiàng)

    JavaScript腳本性能優(yōu)化注意事項(xiàng)

    本文總結(jié)了我在JavaScript編程中所找到的提高JavaScript運(yùn)行性能的一些方法,其實(shí)這些經(jīng)驗(yàn)都基于幾條原則
    2008-11-11
  • js/jquery獲取文本框輸入焦點(diǎn)的方法

    js/jquery獲取文本框輸入焦點(diǎn)的方法

    本篇文章主要是對(duì)js/jquery獲取文本框輸入焦點(diǎn)的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-03-03
  • IE6瀏覽器中window.location.href無效的解決方法

    IE6瀏覽器中window.location.href無效的解決方法

    這篇文章主要介紹了IE6瀏覽器中window.location.href無效的解決方法,給出了正確與錯(cuò)誤的實(shí)例對(duì)比,分析跳轉(zhuǎn)無效的原因與解決方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • 使用gulp構(gòu)建前端自動(dòng)化的方法示例

    使用gulp構(gòu)建前端自動(dòng)化的方法示例

    這篇文章主要介紹了使用gulp構(gòu)建前端自動(dòng)化的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 一個(gè)JavaScript獲取元素當(dāng)前高度的實(shí)例

    一個(gè)JavaScript獲取元素當(dāng)前高度的實(shí)例

    這篇文章主要為大家介紹了一個(gè)JavaScript獲取元素當(dāng)前高度的實(shí)例,比較實(shí)用,建議新手朋友們可以看看
    2014-10-10
  • JavaScript File API實(shí)現(xiàn)文件上傳預(yù)覽

    JavaScript File API實(shí)現(xiàn)文件上傳預(yù)覽

    這篇文章主要為大家介紹了JavaScript File API實(shí)現(xiàn)文件上傳預(yù)覽,F(xiàn)ile API將極大地方便 Web 端的文件上傳等操作,本文將介紹 File API的概況,并用兩個(gè)實(shí)例展示File API的應(yīng)用,感興趣的小伙伴們可以參考一下
    2016-02-02
  • javascript遞歸回溯法解八皇后問題

    javascript遞歸回溯法解八皇后問題

    網(wǎng)上看到許多關(guān)于八皇后算法的文章,很少能看到使用javascript來實(shí)現(xiàn)的,今天就給大家使用javascript來解決下這個(gè)問題,有需要的小伙伴可以參考下。
    2015-04-04
  • 理解Javascript_10_對(duì)象模型

    理解Javascript_10_對(duì)象模型

    什么都不想說,一段代碼兩張圖,解釋一切。注:在此之前請(qǐng)閱讀前面的系列博文
    2010-10-10

最新評(píng)論