首頁 > web前端 > js教程 > 主體

jQuery原型屬性與原型方法詳解_jquery

WBOY
發布: 2016-05-16 15:51:07
原創
1742 人瀏覽過

首先看一下在jQuery1.7.1中定義的原型屬性和方法有哪些?

首先是constructor屬性 

相信熟悉js物件導向部分的開發人員都熟悉,就是用來傳回物件屬性所建立的函數,舉個簡單的例子:

function Person(){};
    var person=new Person();
    alert(person.constructor); //function Person(){}
登入後複製

我們寫繼承的時候喜歡把所有的原型屬性和方法放在一個單獨的物件字面量中,這樣就會導致constructor屬性與「實際」指向不符合例如:

  function Person(){

    }

    Person.prototype={
      say:function(msg){
        alert(msg); 
      }
    }

    var person=new Person();
    person.say('hello');
    alert(person.constructor); //function Object(){[native code]}

登入後複製

這個時候的指向就會改變因為字面量物件是Object的一個實例自然constructor屬性就會執行Object為了修正這個「錯誤」通常需要手動修改回來這就是源碼,源碼中constructor:jQuery的解釋

selector屬性

selector屬性對於使用jquey作為js庫來說沒有用處它主要是用於開發基於jquery的插件或者改造使用,該屬性會返回獲取當前的jquery對象的選擇器字符串,例如:

var obj=$('div a');
console.log(obj.selector);//'div a'

登入後複製

jquery屬性

此屬性傳回目前使用的jQuery版本

console.log($('body').jquery); //1.7.1

登入後複製

length屬性

此屬性傳回jquery物件所包含的元素個數例如:

console.log ( $('body') .length); //1
登入後複製

這4個屬性原始碼如下:

  constructor: jQuery,


  // Start with an empty selector
  selector: "",

  // The current version of jQuery being used
  jquery: "1.7.1",

  // The default length of a jQuery object is 0
  length: 0,

登入後複製

size方法

// The number of elements contained in the matched element set
  size: function() {
    return this.length;
  },

登入後複製

此方法就是傳回jquery物件的length屬性兩者而言建議使用length屬性,可以減少不必要的函式呼叫開銷

toArray方法

toArray: function() {
    return slice.call( this, 0 );
  },
登入後複製

把jQuery集合中所有DOM元素還原成一個陣列。

alert($('li').toArray());
[<li id="foo">, <li id="bar">]
登入後複製

首先這裡的slice方法在jQuery的建構子裡面已經被保留下來,就是Array的原型方法

// Save a reference to some core methods
87 toString = Object.prototype.toString,
88 hasOwn = Object.prototype.hasOwnProperty,
89 push = Array.prototype.push,
90 slice = Array.prototype.slice,
91 trim = String.prototype.trim,
92 indexOf = Array.prototype.indexOf,

登入後複製

透過call方法實現物件冒充,傳入參數0表示不進行截取,由於此方法會傳回一個clean array 也就是純數組這樣就實現了從jquery物件到純數組的轉變,在以後遇到其他類數組形式時也可以採用此方法轉換例如:

<!doctype html>
<html>
  <head>
    <meta charset='utf-8'/>
    <title>jQuery源码分析-原型属性和方法</title>
  </head>
  <body>
    <div>
    </div>
    <div></div>   
  </body>
  <script src='jquery-1.7.1.js'></script>
  <script>
  var divs=document.getElementsByTagName('div');
  console.log(divs); //[div, div]
  alert(divs instanceof Array); //fasle

  alert(Array.prototype.slice.call(divs,0) instanceof Array); //true
  </script>
</html>

登入後複製

所以學習jqeury源碼除了對使用jquery有幫助之外還能學到很多js的使用技巧

get方法

// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
  get: function( num ) {
    return num == null &#63;

      // Return a 'clean' array
      this.toArray() :

      // Return just the object
      ( num < 0 &#63; this[ this.length + num ] : this[ num ] );
  },

登入後複製

此方法的作品是從jquery對象的元素數組中找到其中的某一個並且返回js原聲node元素對象而不是jquery對象,這是跟eq方法不同的地方,此方法接受一個參數如果參數不存則呼叫toArray方法傳回包涵所有元素的數組,如果是大於0的數直接透過下標的方式取得即可如果是負數則透過與長度相加獲得我們寫某些方法需要支援正負數下標的一個很好的方法。如果寫的不是數字,或超過目前物件所包含的元素長度會回傳undefined.

以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板