天天看點

阮一峰部落格轉載記錄

把看過的認為有點意思的,做個連結記錄。

2009年

一、學習JavaScript 閉包詳見阮一峰連結

有一個可以作為面試題:

  var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());
  // 2
  var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());
           

二、用Javascript擷取頁面元素的位置參見連結

講述浏覽器元素位置相關的資訊 (相對位置,絕對位置 ,滾動位置)。

2010年

一、JavaScript 面向對象程式設計(封裝)參見連結

明白constructor \ instanceof \ prototype原型 \ isPrototypeOf \ hasOwnProperty 就沒啥看 的了。

二、JavaScript 面向對象程式設計(構照函數的繼承)參見連結

重點看看,這個可以作為面試題 ☆

三、JavaScript 面向對象程式設計(非構照函數的繼承)參見連結

2011年

一、 JavaScript 快速 排序的實作 參見連結

“快速排序”的排序過程:

  1. 在資料集之中,選擇一個元素作為“基準”。
  2. 所有小于“基準”的元素,都移到“基準”的左邊; 所有大于“基準”的元素,都移到“基準”的右邊。
  3. 對“基準”左邊和右邊的兩個子集,不斷重複第一步和第二部,直到隻剩最後一個元素。

    算法如下:

var quickSort = function(arr){
    if(arr.length <= ){  return arr ; }
    var pivotIndex = Math.floor( arr.length / );
    var pivot = arr.splice( pivotIndex , )[];
    var left = [];
    var right = [];
    for( var i=;i<arr.length;i++ ){
       if( arr[i] < pivot ){
            left.push( arr[i] );
       } else{
            right.push(arr[i]);
        }
    }
    return quickSort( left ).concat( [pivot],quickSort(right) );
};
           

可以作為面試題 ☆

還有一個要留意的, JavaScript 會自動插入行尾分号(阮一峰那有誤)。參看連結

function aa(){
          return 
              { 
                i:
              };
    }
//  undefined
    function aa(){
          return { 
                    i:
                 };
     }
//  { i:1 }
           

數字和對象的區分:(道格拉斯 )

if( arr && typeof arr === 'object' && typeof arr.length === 'number' && !arr.propertyIsEnumerable('length')){
  //  是數組
}

//  現在可以用  
Array.isArray( arr  )  //  傳回布爾值。
           

二、 新版jquery 的ajax 新寫法: ☆

jQuery.Deferred 符合 Promises/A+ 規範和 ES2015 規範

參見連結

  $.ajax("test.html")
  .done(function(){ alert("哈哈,成功了!");} )
  .fail(function(){ alert("出錯啦!"); } )
  .done(function(){ alert("第二個回調函數!");} );
           

新版jQuery 更新的那些功能

對于新版需要注意按需引入對應的js.

1、如果你要相容更廣泛的浏覽器,包括IE8,Opera 12,Safari 5等,使用jQuery-Compat 3.0.0包。我們推薦大多數站點使用這個版本,因為它為最多的網站通路者提供了最佳的相容性。

2、如果你的網站是專為領先的浏覽器搭建的,或者是一個webview(例如PhoneGap或Cordova)容器中的HTML應用,并且你知道哪些浏覽器引擎會使用它,那就使用jQuery 3.0.0包。

github參看

這種寫法可以學習一下。 !

jQuery Api

2012年

一、 JavaScript 程式設計風格 參見連結

就簡單的幾個風格和常見的風格。

二、 JavaScript 定義類的三種方法參見連結

重點 Object.create 遇到不支援的Object.create 則如下實作:

if( !Object.create ){
    Object.create = function(o){
        function F(){} 
        F.prototype = o;
        return new F();
    };
}
           

還講到了一種,極簡主義法 感覺挺新穎的。 可以學習下。

var Cat = {
    createNew:function(){
        // some code here.
    }
}

// eg 
var Cat = {
    createNew:function(){
        var cat = {};
        cat.name = 'aa';
        cat.makeSound = function{ alert('123') };
        return cat;
    }
}

var cat1 = Cat.createNew();
    cat1.makeSound();
           

文中還模拟了 繼承、私有屬性和私有方法、資料共享 。

可以面試說出裝B神器。

三、 檔案上傳的漸進式增強參見連結

如果遇到檔案上傳的時候,可以看看學習下,(ajax 上傳、進度條、拖放上傳)。

四、 XMLHttpRequest Level 2 使用指南 。參見連結

講了ajax 2.0 的變化。還是還可以看看

比如新增:

  * 可以設定HTTP請求的時限。
  * 可以使用FormData對象管理表單資料。
  * 可以上傳檔案。
  * 可以請求不同域名下的資料(跨域請求)。
  * 可以擷取伺服器端的二進制資料。
  * 可以獲得資料傳輸的進度資訊。
           

五、 子產品化程式設計的演變。

Javascript子產品化程式設計(一):子產品的寫法

Javascript子產品化程式設計(二):AMD規範

Javascript子產品化程式設計(三):require.js的用法

學會合理使用異步程式設計(promise) ☆

2013年

一、Javascript 嚴格模式詳解 參見連結

二、如何讓搜尋引擎抓取AJAX内容?(在單頁面盛行的今天)這裡寫連結内容

值得注意的是谷歌曾經提出“井号+感歎号”的結構

http://example.com#!1
http://twitter.com/#!/ruanyf
           

結果使用者不接受。

最後采用的是* History API。*

Event Loop是一個程式結構,用于等待和發送消息和事件。

2014年

一、ES6 出書 《ECMAScript 6入門》

二、前端子產品管理器簡介

講到了Bower,Browserify,Component和Duo。

最終以推薦Duo 為結尾。

三、重談 Event Loop?

JavaScript 運作機制詳解:再談Event Loop詳情看 ☆☆

2015年

一、強類型 JavaScript 的解決方案這裡寫連結内容

TypeScript 是微軟2012年推出的一種程式設計語言,屬于 JavaScript 的超集,可以編譯為 JavaScript 執行。 它的最大特點就是支援強類型和 ES6 Class。

這個得好好學習看看。

二、JavaScript 有多靈活?

給原型上加方法

().double().square()
//  如果要改寫,該怎麼弄
().double.suqare

           

重點來了,

ES5規定,每個對象的屬性都有一個取值方法get,用來自定義該屬性的讀取操作。

Number.prototype = Object.defineProperty(
  Number.prototype, "double", {
    get: function (){return (this + this)} 
  }
);

Number.prototype =  Object.defineProperty(
  Number.prototype, "square", {
    get: function (){return (this * this)} 
  }
);
           

上面代碼在Number.prototype 上定義了兩個屬性 double and square ,以及他們的取值方法get.

這樣就可以采用上面的方法寫了

().double.square
// 256
           

三、React 入門執行個體教程

react 更新神速,這篇的demo 有點過時了,不過可以敲一敲,多一點點感覺。

繼續閱讀