云顶娱乐棋牌-云顶娱乐每天送6元
做最好的网站

深远之参数按值传递,深刻之call和apply的模拟完

JavaScript 深切之参数按值传递

2017/05/23 · JavaScript · 参数

最早的小讲出处: 冴羽   

JavaScript 深远之call和apply的萧规曹随达成

2017/05/25 · JavaScript · apply, call

原稿出处: 冴羽   

仙剑奇侠传的web移植版

2015/10/06 · HTML5 · 1 评论 · 仙剑奇侠传

深远之参数按值传递,深刻之call和apply的模拟完成。初稿出处: 刘骥(@刘骥-JimLiu)   

HTTP/2 尾部压缩技能介绍

2015/11/03 · HTML5 · HTTP/2

初稿出处: imququ(@屈光宇)   

咱俩理解,HTTP/2 公约由四个 本田CR-VFC 组成:一个是 RFC 7540,描述了 HTTP/2 左券本身;三个是 RFC 7541,描述了 HTTP/2 契约中选拔的底部压缩技巧。本文将由此实际案例辅导我们详细地认知 HTTP/2 尾部压缩那门技能。

JavaScript 深远之继续的有余方法和优短处

2017/05/28 · JavaScript · 继承

最早的文章出处: 冴羽   

定义

在《JavaScript高端程序设计》第三版 4.1.3,讲到传递参数:

ECMAScript中具有函数的参数都以按值传递的。

什么是按值传递呢?

也正是说,把函数外界的值复制给函数内部的参数,就和把值从四个变量复制到另三个变量同样。

call

一句话介绍 call:

call() 方法在行使二个钦赐的 this 值和多少个钦定的参数值的前提下调用某些函数或方式。

举个例证:

var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call(foo); // 1

1
2
3
4
5
6
7
8
9
var foo = {
    value: 1
};
 
function bar() {
    console.log(this.value);
}
 
bar.call(foo); // 1

在乎两点:

  1. call 改变了 this 的指向,指向到 foo
  2. bar 函数推行了

0. 前言

那是叁个坑了太久太久的类别,久到本身早已不记得挖这几个坑是如何时候了。大概是13年的伏季吗,笔者挖了这么些坑,然后信心满满的在那时十一长假宅了N天(小编还相比较清楚的纪念那时候万幸WOW开拓围攻奥格瑞玛别本的阶段),写下了全部框架,以及最中央的一片段代码,然后,就从未有过然后了。

大意一年后,笔者又翻出来了这一个坑,重构了多量的代码,然而速度差不离从不实质性的前行,以至因为重构而颇负倒退- -“,然则因为读了《游戏引擎架构》这本书,小编对那一个坑又有了新的认知,对于这么些程序到底要怎么写心里有谱多了。

自然布置是在二〇一五年夏天搞出来,那样能够越过仙剑20周年(1994年11月)宣布,不过不用想也晓得断定是继续坑了。

磕磕绊绊到现行反革命,总算是把嬉戏的完全落成度拉到了多个相比较能见人的水平,于是小编觉着照旧尽早公布的好,免得又变有生之年了。

怎么要减小

在 HTTP/1 中,HTTP 央浼和响应都以由「状态行、乞请 / 响应底部、音信主体」三有个别组成。平时来说,新闻主体都会透过 gzip 压缩,可能笔者传输的正是削减过后的二进制文件(举例图片、音频),但气象行和尾部却尚未经过任何压缩,间接以纯文本传输。

随着 Web 功效越发复杂,各种页面产生的乞请数也尤为多,依据 HTTP Archive 的总括,当前平均各种页面都会爆发众几个央求。越多的伏乞导致消耗在头顶的流量越多,非常是每一回都要传输 UserAgent、Cookie 那类不会频频员和转业移的源委,完全都是一种浪费。

以下是本人随手张开的二个页面包车型地铁抓包结果。能够看出,传输尾部的互联网支出超过100kb,比 HTML 还多:

云顶娱乐每天送6元 1

上边是里面三个呼吁的精心。能够观看,为了得到 58 字节的数目,在头顶传输上开销了少数倍的流量:

云顶娱乐每天送6元 2

HTTP/1 时期,为了减小底部消耗的流量,有过多优化方案能够尝试,举个例子合併诉求、启用 库克ie-Free 域名等等,然而那一个方案或多或少会引进一些新的难点,这里不展开斟酌。

写在前边

正文解说JavaScript种种继承方式和优劣势。

然则注意:

那篇小说更疑似笔记,哎,再让作者咋舌一句:《JavaScript高等程序设计》写得真是太好了!

按值传递

举个轻巧的事例:

var value = 1; function foo(v) { v = 2; console.log(v); //2 } foo(value); console.log(value) // 1

1
2
3
4
5
6
7
var value = 1;
function foo(v) {
    v = 2;
    console.log(v); //2
}
foo(value);
console.log(value) // 1

很好驾驭,当传递 value 到函数 foo 中,相当于拷贝了一份 value,倘若拷贝的这份叫 _value,函数中期维修改的都以 _value 的值,而不会影响原本的 value 值。

模仿完结率先步

云顶娱乐每天送6元,那么我们该怎么模拟达成那些效果与利益啊?

试想当调用 call 的时候,把 foo 对象更动成如下:

var foo = { value: 1, bar: function() { console.log(this.value) } }; foo.bar(); // 1

1
2
3
4
5
6
7
8
var foo = {
    value: 1,
    bar: function() {
        console.log(this.value)
    }
};
 
foo.bar(); // 1

其一时候 this 就针对了 foo,是还是不是很简短吗?

只是那样却给 foo 对象自小编增添了叁本性子,那可那些啊!

唯独也不用挂念,我们用 delete 再删除它不就好了~

之所以大家模拟的步骤能够分成:

  1. 将函数设为对象的性质
  2. 施行该函数
  3. 除去该函数

以上个例子为例,便是:

// 第一步 foo.fn = bar // 第二步 foo.fn() // 第三步 delete foo.fn

1
2
3
4
5
6
// 第一步
foo.fn = bar
// 第二步
foo.fn()
// 第三步
delete foo.fn

fn 是目的的属性名,反正最后也要刨除它,所以起成什么样都不在乎。

基于这么些思路,大家得以尝尝着去写第一版的 call2 函数:

// 第一版 Function.prototype.call2 = function(context) { // 首先要拿走调用call的函数,用this能够获得 context.fn = this; context.fn(); delete context.fn; } // 测量检验一下 var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call2(foo); // 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 第一版
Function.prototype.call2 = function(context) {
    // 首先要获取调用call的函数,用this可以获取
    context.fn = this;
    context.fn();
    delete context.fn;
}
 
// 测试一下
var foo = {
    value: 1
};
 
function bar() {
    console.log(this.value);
}
 
bar.call2(foo); // 1

恰恰可以打字与印刷 1 哎!是还是不是很开心!(~ ̄▽ ̄)~

1. 无图言屌

云顶娱乐棋牌,优酷录像——有录制有JB!

云顶娱乐每天送6元 3云顶娱乐每天送6元 4

云顶娱乐每天送6元 5

云顶娱乐每天送6元 6

云顶娱乐每天送6元 7

云顶娱乐每天送6元 8

云顶娱乐每天送6元 9

云顶娱乐每天送6元 10

云顶娱乐每天送6元 11

缩减后的功力

接下去本身将动用访问本博客的抓包记录以来明 HTTP/2 尾部压缩带来的转移。怎样行使 Wireshark 对 HTTPS 网站进行抓包并解密,请看自个儿的那篇文章。本文使用的抓包文件,能够点这里下载。

率先间接上海教室。下图选中的 Stream 是第贰遍访谈本站,浏览器发出的呼吁头:

云顶娱乐每天送6元 12

从图片中能够见到那一个 HEADERubiconS 流的长度是 206 个字节,而解码后的头顶长度有 451 个字节。同理可得,压缩后的底部大小收缩了概略上多。

不过那就是整套呢?再上一张图。下图选中的 Stream 是点击本站链接后,浏览器发出的乞请头:

云顶娱乐每天送6元 13

能够见见那二次,HEADEQashqaiS 流的尺寸唯有 49 个字节,但是解码后的底厅长度却有 470 个字节。那二回,压缩后的头顶大小大概唯有原本大小的 1/10。

缘何前后三遍差异这么大啊?大家把两遍的头顶消息进行,查看同一个字段一回传输所并吞的字节数:

云顶娱乐每天送6元 14

云顶娱乐每天送6元 15

相比较之下后能够开采,第三遍的央求底部之所以相当的小,是因为大多数键值对只占用了贰个字节。特别是 UserAgent、Cookie 那样的头部,第贰遍呼吁中供给占用比较多字节,后续要求中都只要求三个字节。

1.原型链承继

function Parent () { this.name = 'kevin'; } Parent.prototype.getName = function () { console.log(this.name); } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); console.log(child1.getName()) // kevin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Parent () {
    this.name = 'kevin';
}
 
Parent.prototype.getName = function () {
    console.log(this.name);
}
 
function Child () {
 
}
 
Child.prototype = new Parent();
 
var child1 = new Child();
 
console.log(child1.getName()) // kevin

问题:

1.引用类型的性质被有着实例分享,举个例证:

function Parent () { this.names = ['kevin', 'daisy']; } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); child1.names.push('yayu'); console.log(child1.names); // ["kevin", "daisy", "yayu"] var child2 = new Child(); console.log(child2.names); // ["kevin", "daisy", "yayu"]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Parent () {
    this.names = ['kevin', 'daisy'];
}
 
function Child () {
 
}
 
Child.prototype = new Parent();
 
var child1 = new Child();
 
child1.names.push('yayu');
 
console.log(child1.names); // ["kevin", "daisy", "yayu"]
 
var child2 = new Child();
 
console.log(child2.names); // ["kevin", "daisy", "yayu"]

2.在创设 Child 的实例时,无法向Parent传参

本文由云顶娱乐棋牌发布于云顶娱乐棋牌,转载请注明出处:深远之参数按值传递,深刻之call和apply的模拟完

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。