国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

through2.js,xtend.js源碼

pekonchan / 2540人閱讀

摘要:優化性能這里有個有意思的地方。在多個參數的情況下。無則跳過,支持覆蓋不可變。與原先不同的是,這里使用了一份初始化的對象引用來作為容器承載其余沒有不同

through2 本質上是一種transform的流
被封裝更好地操作流
var Transform = require("readable-stream/transform")
  , inherits  = require("util").inherits
  , xtend     = require("xtend")

function DestroyableTransform(opts) {
  // 繼承Transform
  Transform.call(this, opts)
  this._destroyed = false
}

inherits(DestroyableTransform, Transform)
// 原型接口destory 用來關閉流
DestroyableTransform.prototype.destroy = function(err) {
  if (this._destroyed) return
  this._destroyed = true
  
  var self = this
  process.nextTick(function() {
    if (err)
      self.emit("error", err)
    self.emit("close")
    //events的使用
  })
}

// a noop _transform function
// 空操作
function noop (chunk, enc, callback) {
  callback(null, chunk)
}


// create a new export function, used by both the main export and
// the .ctor export, contains common logic for dealing with arguments
// 返回一個導出的函數接口
function through2 (construct) {
// 返回使用的匿名函數
  return function (options, transform, flush) {
    if (typeof options == "function") {
      flush     = transform
      transform = options
      options   = {}
    }
    // 這種匿名函數我們一般可以用來做二次判斷觸發
    if (typeof transform != "function")
      transform = noop

    if (typeof flush != "function")
      flush = null

    return construct(options, transform, flush)
  }
}


// main export, just make me a transform stream!
// 主要出口,使用through2返回一個DestroyTransform實例
module.exports = through2(function (options, transform, flush) {
  var t2 = new DestroyableTransform(options)

  t2._transform = transform

  if (flush)
    t2._flush = flush

  return t2
})


// make me a reusable prototype that I can `new`, or implicitly `new`
// with a constructor call
// 對外暴露一個可以直接 new (或者不加 new)來創建實例的的構造函數
module.exports.ctor = through2(function (options, transform, flush) {
  function Through2 (override) {
    if (!(this instanceof Through2))
        // 這里就是直接自動new
      return new Through2(override)

    this.options = xtend(options, override)
    // 添加配置

    DestroyableTransform.call(this, this.options)
  }

  inherits(Through2, DestroyableTransform)

  Through2.prototype._transform = transform

  if (flush)
    Through2.prototype._flush = flush

  return Through2
})

// Object模式的簡單封裝
module.exports.obj = through2(function (options, transform, flush) {
  var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))

  t2._transform = transform

  if (flush)
    t2._flush = flush

  return t2
})
xtend lib //簡單的繼承 兩種,一種可變  一種不可變
module.exports = extend

var hasOwnProperty = Object.prototype.hasOwnProperty;
// 緩存老套路。優化性能
function extend(target) {
    // 這里有個有意思的地方。target第一個拿進來。在多個參數的情況下。下面從arguments[1]開始取,而下面可以直接使用target,而不用再聲明一下變量
    for (var i = 1; i < arguments.length//這塊其實可以緩存長度的; i++) {
        var source = arguments[i]
        
        for (var key in source) {
            if (hasOwnProperty.call(source, key)) {
                // 判斷當前實例是否存在屬性
                // 有則添加到target上。無則跳過,支持覆蓋
                target[key] = source[key]
            }
        }
    }

    return target
}

不可變。
module.exports = extend

var hasOwnProperty = Object.prototype.hasOwnProperty;

function extend() {
// 與原先不同的是,這里使用了一份初始化的對象引用來作為容器承載
// 其余沒有不同
    var target = {}

    for (var i = 0; i < arguments.length; i++) {
        var source = arguments[i]

        for (var key in source) {
            if (hasOwnProperty.call(source, key)) {
                target[key] = source[key]
            }
        }
    }

    return target
}

throught

xtend

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93225.html

相關文章

  • Flink Metrics 源碼解析

    摘要:有如下模塊源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析源碼解析使用和監控和博客從到學習介紹從到學習上搭建環境并構建運行簡單程序入門從到學習配置文件詳解從到學習介紹從到學習如何自 Flink Metrics 有如下模塊: Flink Metrics 源碼解析 —— Flink-metrics-core Flink Metrics 源碼解析 —— Flink-metr...

    sshe 評論0 收藏0
  • 精讀《源碼學習》

    摘要:精讀原文介紹了學習源碼的兩個技巧,并利用實例說明了源碼學習過程中可以學到許多周邊知識,都讓我們受益匪淺。討論地址是精讀源碼學習如果你想參與討論,請點擊這里,每周都有新的主題,周末或周一發布。 1. 引言 javascript-knowledge-reading-source-code 這篇文章介紹了閱讀源碼的重要性,精讀系列也已有八期源碼系列文章,分別是: 精讀《Immer.js》源...

    aboutU 評論0 收藏0
  • JDK1.8源碼分析01之學習建議(可以延伸其他源碼學習)

    摘要:唐老師,回答道讀源碼是要建立在你的基礎經驗足夠的情況下。除了自己去閱讀源碼之外,比如學習某個類的時候,可以專門結合一些優質的博客針對性的對比學習,并查漏補缺。制定源碼學習計劃。多調試,跟蹤源碼。如若有好的學習方法,可以留言一起交流學習。 序言:目前看一看源碼,來提升自己的技術實力。同時現在好多面試官都喜歡問源碼,問你是否讀過JDK源碼等等? 針對如何閱讀源碼,也請教了我的老師。下面就先...

    ky0ncheng 評論0 收藏0
  • 源碼之下無秘密 ── 做最好的 Netty 源碼分析教程

    摘要:背景在工作中雖然我經常使用到庫但是很多時候對的一些概念還是處于知其然不知其所以然的狀態因此就萌生了學習源碼的想法剛開始看源碼的時候自然是比較痛苦的主要原因有兩個第一網上沒有找到讓我滿意的詳盡的源碼分析的教程第二我也是第一次系統地學習這么大代 背景 在工作中, 雖然我經常使用到 Netty 庫, 但是很多時候對 Netty 的一些概念還是處于知其然, 不知其所以然的狀態, 因此就萌生了學...

    shenhualong 評論0 收藏0

發表評論

0條評論

pekonchan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<