jQuery原型属性和原型方法详解


Posted in Javascript onJuly 07, 2015

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

jQuery原型属性和原型方法详解

jQuery原型属性和原型方法详解

首先是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 ?

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

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

此方法的作品是从jquery对象的元素数组中找到其中的某一个并且返回js原声node元素对象而不是jquery对象,这是跟eq方法不同的地方 ,此方法接受一个参数如果参数不存则调用toArray方法返回包涵所有元素的数组,如果是大于0的数直接通过下下标的方式获取即可如果是负数则通过与长度相加获得我们写某些方法需要支持正负数下标的一个很好的方法。如果写的不是数字,或者超过当前对象所包含的元素长度会返回undefined.

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
js 代码集(学习js的朋友可以看下)
Jul 22 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
May 03 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
微信小程序左滑删除效果的实现代码
Feb 20 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
Dec 22 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
Dec 28 Javascript
angular中子控制器向父控制器传值的实例
Oct 08 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 Javascript
vue input标签通用指令校验的实现
Nov 05 Javascript
在JavaScript中访问字符串的子串
Jul 07 #Javascript
jQuery.each使用详解
Jul 07 #Javascript
JavaScript中字符串拼接的基本方法
Jul 07 #Javascript
简单介绍JavaScript中字符串创建的基本方法
Jul 07 #Javascript
浅谈JavaScript中运算符的优先级
Jul 07 #Javascript
浏览器中url存储的JavaScript实现
Jul 07 #Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 #Javascript
You might like
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
mysql 全文搜索 技巧
2007/04/27 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
php常用Stream函数集介绍
2013/06/24 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
js 上传图片预览问题
2010/12/06 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
详解vue-cli3使用
2018/08/14 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
python中常用的九种预处理方法分享
2016/09/11 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python实现word2Vec model过程解析
2019/12/16 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Unix/Linux开发面试题
2016/08/16 面试题
创业计划实施的7大步骤
2014/02/05 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
捐书仪式主持词
2015/07/04 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL
Django框架中视图的用法
2022/06/10 Python