ES6的Iterator,jquery Fn

ES6的Iterator对象详解

Iterator实现原理

  1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
  2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
  3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
  4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

ES6 里的迭代器并不是一种新的语法或者是新的内置对象(构造函数), 而是一种协议,所有遵循了这个协议的对象都可以称之为迭代器对象,所以说迭代器是一种协议,一个统一的接口标准,两个属性都不返回值也不会报错,但是不符合协议标准了,就不能称作迭代器了

如何部署Iterator接口

在ES6中,有三类数据结构原生具备Iterator接口: 数组、某些类似数组的对象、Set和Map结构 ,对象(Object)之所以没有默认部署Iterator接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。

Iterator接口部署在对象的 Symbol.Iterator 属性上, 可以调用这个属性,就得到遍历器对象。

     var arr = [‘a‘, ‘b‘, ‘c‘];
     var iterator = arr[Symbol.iterator]();
     var a = iterator.next();
     console.log(a)   //{value: ‘a‘, done: false}

for–of与for–in

for...in 遍历每一个属性名称,而 for...of遍历每一个属性值。

在对象没有部署Iterator接口的情况下调用for…of会报错。当一个部署了Iterator接口的对象调用for…of时,实现的步骤是这样的:

  1. 调用对象的Symbol.Iterator的属性获得遍历器生成函数;
  2. 调用遍历器生成函数返回遍历器对象其实for…of就相当于一直调用遍历器对象的next方法,直到返回done为true;

Jquery 的Fn

jquery的fn 就添加了一个迭代器,fn实际上是一个对象。

if (typeof Symbol === "function") {
        jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
    }
时间: 2024-10-17 02:43:25

ES6的Iterator,jquery Fn的相关文章

五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()

给jQuery做过扩展或者制作过jQuery插件的人这两个方法东西可能不陌生.jQuery.extend([deep],target,object1,,object2...[objectN]) jQuery.fn.extend([deep],target,object1,,object2...[objectN])这两个属性都是用于合并两个或多个对象的属性到target对象.deep是布尔值,表示是否进行深度合并,默认是false,不执行深度合并.通过这种方式可以在jQuery或jQuery.fn

jquery插件之jquery.extend和jquery.fn.extend的区别

jquery.extend jquery.extend(),是拓展jquery这个类,即可以看作是jquery这个类本身的静态方法,例如: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/

jQuery.extend()方法和jQuery.fn.extend()方法

jQuery.extend()方法和jQuery.fn.extend()方法源码分析 这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> <html> <head> <title></title> <script src='jquery-1.7.1.js'></script> <

jquery.fn.extend与jquery.extend用法与区别

关于jquery.fn.extend与jquery.extend用法与区别. jQuery为开发插件提拱了两个方法,分别是:  代码如下 复制代码 jQuery.fn.extend(object);  和   jQuery.extend(object); jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jQuery.fn.extend(object);给jQuery对象添加方法. fn 是什么东西呢.查看jQuery代码,就不难发现.  代码如下 复制

jQuery.extend和jQuery.fn.extend的区别

我们先把jQuery看成了一个类,这样好理解一些. jQuery.extend(),是扩展的jQuery这个类. 假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能.这样的话,不论是男人,女人,xx人.....等能继承这个技能(方法)了. 可以如下图这样写着: 然后:$.liu();这样就能打印出来”liu“这个字符串 代码在下面: 这说明啥啊,这说明.liu()变成了jQuery这个类本身的方法(object)

jquery,fn,extend和jquery.extend

1 把jquery看成是一个类,jquery.extend()是扩展这个类的静态方法,也即是扩展的全局函数,扩展的方法只跟这个类本身有关,跟具体的jquery这个类的实例化对象无关. 例如:$.each(); 2 jquery.fn.extend扩展的是jquery原型对象的方法,扩展的方法只有jquery这个类的实例对象才能使用. 例如:$('#aa').eat();

jQuery.fn.extend与jQuery.extend 的区别

1 jquery.extend 是jquery 静态的方法 实例 jQuery.extend({    liu: function(){        alert('liu');    } }); 使用方法:$.liu();这样就能打印出来”liu“这个字符串 2 Jquery.fn.extend  是jquery 实例的方法 实例 jQuery.fn = jQuery.prototype = {          init: function( selector, context ) {//…

四.jQuery源码解析之jQuery.fn.init()的参数解析

从return new jQuery.fn.init( selector, context, rootjQuery )中可以看出 参数selector和context是来自我们在调用jQuery方法时传过来的.那么selector和context都有哪些可能. 对于表格中的4~9行中的可能做具体分析. 如果selector是字符串,则首先检测是html代码还是#id. 126行的if语句:以"<"开头,以">"结尾,且长度>=3.则假设额这个是HT

jQuery.fn

DIY一个jQuery 写了一个非常简单的 jQuery.fn.init 方法: jQuery.fn.init = function (selector, context, root) { if (!selector) { return this; } else { var elem = document.querySelector(selector); if (elem) { this[0] = elem; this.length = 1; } return this; } }; 因此我们在