换个思路清楚Javascript中的this,Javascript中apply方法

2019-10-29 22:29栏目:真实赌钱游戏网站
TAG:

JavaScript 开辟者:最欢腾 React,Vue.js 比 Angular 更值得尝试

2017/12/18 · JavaScript · 开发

最初的稿件出处: stateofjs   译文出处:oschina/达尔文   

20个试玩平台 1

State Of JavaScript 2017 调查结果已经出炉。笔者对比很多 JavaScript 开辟者举办了考察,以询问今后前端开拓者对前面一个种种技艺栈、框架的运用状态与思想。

根据 10 月份的 State of the Octoverse 2017 报告,在存活的 337 种开采语言中,JavaScript 仍是 GitHubbers 的最爱。JavaScript 的生态系统一年比一年增加,就算是最有经历的开垦职员,在各种阶段思考可用的多数筛选时,也会变得支支吾吾不决。

Stack Overflow 几日前做的本事可行性剖析彰显,部分 JavaScript 的技能成员平素显示“持续增高”的主旋律,如:Angular,TypeScript 和 Meteor。

20个试玩平台 2

教你用 HTML5 制作Flappy Bird(下)

2014/03/23 · HTML5, JavaScript · 1 评论 · HTML5, Javascript

本文由 伯乐在线 - 杨帅 翻译。未经许可,制止转发!
乌Crane语出处:lessmilk。招待出席翻译组。

在上一篇HTML5教程中,我们做了叁个简化版的Flappy Bird。尽管能够“称得上”是风流罗曼蒂克款游戏了,但却是大器晚成款很无聊的玩乐。在此篇文章中大家来看风度翩翩看怎样给它增加动画作用和音响效果。即使并未改换游戏的建制,但却能够使游戏变得越发有趣。你能够点击这里先体验一下。

温婉的数组降维——Javascript中apply方法的妙用

2016/02/18 · JavaScript · apply, 数组

原来的小说出处: ralph_zhu   

将多维数组(极其是二维数组)转变为生机勃勃维数组是事情费用中的常用逻辑,除了接收节约财富的大循环转换以外,大家还是能够利用Javascript的言语特色实现更为精简温婉的改造。本文将从节约的循环调换初阶,逐条介绍二种常用的转变方法,并借此轻松回想Array.prototype.concat方法和Function.prototype.apply方法。
以下代码将以把二维数组降维到风流洒脱维数组为例。

  1. 厉行节约的转换

JavaScript

function reduceDimension(arr) { var reduced = []; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr[i].length; j++) { reduced.push(arr[i][j]); } } return reduced; }

1
2
3
4
5
6
7
8
9
function reduceDimension(arr) {
    var reduced = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr[i].length; j++) {
            reduced.push(arr[i][j]);
        }
    }
    return reduced;
}

此形式思路轻便,利用再度循环遍历二维数组中的各种成分并放置新数组中。

 

  1. 利用concat转换
    先来回想一下MDN上对于该方法的牵线:
    “concat creates a new array consisting of the elements in the object on which it is called, followed in order by, for each argument, the elements of that argument (if the argument is an array) or the argument itself (if the argument is not an array).”

即只要concat方法的参数是一个成分,该因素会被直接插入到新数组中;假诺参数是一个数组,该数组的相继要素将被插入到新数组中;将该性情应用到代码中:

JavaScript

function reduceDimension(arr) { var reduced = []; for (var i = 0; i < arr.length; i++){ reduced = reduced.concat(arr[i]); } return reduced; }

1
2
3
4
5
6
7
function reduceDimension(arr) {
    var reduced = [];
    for (var i = 0; i < arr.length; i++){
        reduced = reduced.concat(arr[i]);
    }
    return reduced;
}

arr的每三个因素都是三个数组,作为concat方法的参数,数组中的每一个子成分又都会被单独插入进新数组。
行使concat方法,大家将再一次循环简化为了单重循环。

 

  1. 利用apply和concat转换
    坚决守住规矩,先来回看一下MDN上对此apply方法的介绍:
    “The apply() method calls a function with a given this value and arguments provided as an array.”

即apply方法会调用二个函数,apply方法的首先个参数会作为被调用函数的this值,apply方法的第一个参数(三个数组,或类数组的靶子)会作为被调用对象的arguments值,也正是说该数组的顺序要素将会挨个成为被调用函数的相继参数;将该个性应用到代码中:

function reduceDimension(arr) { return Array.prototype.concat.apply([], arr); }

1
2
3
function reduceDimension(arr) {
    return Array.prototype.concat.apply([], arr);
}

arr作为apply方法的第三个参数,本人是三个数组,数组中的每二个成分(仍然数组,即二维数组的第二维)会被看成参数依次传入到concat中,效果相像[].concat([1,2], [3,4], [5,6])。
选用apply方法,大家将单重循环优化为了生机勃勃行代码,很简短有型有木有啊~

读者也可参考本文思路,自身使用递归完结N维数组降维的逻辑。

3 赞 8 收藏 评论

20个试玩平台 3

自在学习 JavaScript (3):函数中的暗中认可参数

2017/11/11 · JavaScript · 函数, 参数

初藳出处: Dhananjay Kumar   译文出处:码农网 – 小峰   

JavaScript函数可以有私下认可参数值。通过暗许函数参数,你可以发轫化带有私下认可值的专门的学业参数。借使不早先化具备有些值的参数,则该参数的暗中同意值为undefined。

请看下列代码:

function foo(num1){ console.log(num1); } foo();

1
2
3
4
function foo(num1){
    console.log(num1);
}
foo();

在调用函数foo时,你未有传递任何参数,由此变量num1的暗中认可值设置为undefined。可是,有的时候你大概供给设置私下认可值而非undefined。过去,最好的政策是测验参数值undefined,然后分配三个值。所以,在上头的例子中,借令你想要将num1的暗中认可值设置为9,那么您能够依据以下代码所示的方法做:

function foo(num1) { if (num1 === undefined) { num1 = 9; } console.log(num1); } foo();

1
2
3
4
5
6
7
function foo(num1) {
    if (num1 === undefined) {
        num1 = 9;
    }
    console.log(num1);
}
foo();

ECMAScript 6引进了函数的暗许参数。使用ECMA 二零一六的默许参数效能,你将不再须要检查未定义的参数值。今后,你能够将9安装为参数自己的私下认可值。你能够重写上述函数以利用暗中认可值,如下所示:

function foo(num1 =9) { console.log(num1); } foo();

1
2
3
4
function foo(num1 =9) {
    console.log(num1);
}
foo();

对此函数foo,即使num1参数的值未被传送,那么JavaScript将安装9作为num1的暗中同意值。

换个思路清楚Javascript中的this

2017/07/27 · JavaScript · this

原稿出处: Leechikit   

在互连网海人民广播电视台湾大学小说都对 Javascript 中的 this 做了详细的牵线,但基本上是介绍各样绑定格局或调用方式下 this 的针对性,于是小编想有叁个合并的笔触来更好精通 this 指向,使大家更加好判别,以下有点内容不是原理,而是意气风发种解题思路。

State Of JavaScript 2017 调查结果

爱怜度调查

20个试玩平台 4

结果展现,有将近 9K 的被考查者表示听过 TypeScript ,并筹划学学看。在那之中最受招待的是 ES6,超过2万的顾客表示用过,并还有只怕会持续用或另行使用。

前端开垦

20个试玩平台 5

在对前者框架使用意况进行考查时,现身了叁个很有趣的情景:多数接待上访表示向来不选用过前端框架!

在利用过前端框架的选拔访谈者中,React 的使用率是最高的,有 14K 的人使用过并表示会另行行使。

除外,Vue.js 的美评度同一时间当先了 Angular 1 和 2,有 12K 的选用新闻报道人员都代表筹划攻读 Vue.js,遵照这一个方向,二〇生龙活虎八年最受招待的前端框架便是Vue.js 也大概呢。

状态管理工科具

20个试玩平台 6

提起状态管理工科具的接受情状,REST API 不容争辩摘得桂冠,帮衬者到达了 21K,接着是 Redux 和 Firebase。 GraphQL 令人记念深入,有 14K 的选取媒体人表示会试风流倜傥试,这象征二〇二〇年的结果也许会有所不一样。

后端开拓

20个试玩平台 7

依靠地方提到的 Stack Overflow 的结果,Meteor 还是挺盛名的,但犹如从未给此番的接纳访谈者留下深刻的影像。此次排行,Meteor 排在了 Express 和 Koa 的末端,位列第三。

测试

20个试玩平台 8

CSS

20个试玩平台 9

其他

20个试玩平台 10

越来越多考察内容请查看:这里

1 赞 收藏 评论

20个试玩平台 11

设置

第一下载新的沙盘。个中包罗了大家在上八个科目中完毕的代码和贰个新的音响效果文件。

开发main.js,最初敲吧。

检查未定义的参数

尽管你在调用函数时不问可知地传递undefined作为参数值,参数值也将安装为暗许值。

function foo(num1 =9) { console.log(num1); } foo(undefined);

1
2
3
4
function foo(num1 =9) {
    console.log(num1);
}
foo(undefined);

在地方的代码中,你传递undefined为num1的值;由此,num1的值将被安装为暗中同意值9。

从call方法起头

call 方法允许切换函数施行的上下文遭受(context),即 this 绑定的靶子。

大多数介绍 this 的稿子中都会把 call 方法放到最后介绍,但此文大家要把 call 方法放在第一人介绍,并从 call 方法切入来钻探 this ,因为 call 函数是显式绑定 this 的对准,大家来寻访它怎么模拟达成(不思虑传入 nullundefined 和原始值):

Function.prototype.call = function(thisArg) { var context = thisArg; var arr = []; var result; context.fn = this; for (let i = 1, len = arguments.length; i < len; i++) { arr.push('arguments[' + i + ']'); } result = eval("context.fn(" + arr + ")"); delete context.fn; return result; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function.prototype.call = function(thisArg) {
    var context = thisArg;
    var arr = [];
    var result;
 
    context.fn = this;
 
    for (let i = 1, len = arguments.length; i < len; i++) {
        arr.push('arguments[' + i + ']');
    }
 
    result = eval("context.fn(" + arr + ")");
 
    delete context.fn;
 
    return result;
}

从以上代码大家能够看看,把调用 call20个试玩平台 , 方法的函数作为第八个参数对象的主意,那时一定于把第八个参数对象作为函数实行的上下文意况,而 this 是指向函数实行的上下文情况的,由此 this 就本着了第三个参数对象,完成了 call 方法切换函数实行上下文情形的法力。

添加飞行动画

鸟儿上下飞行的不二等秘书技太枯燥了,大家来加一些特效,让它看起来有个别游戏的指南。

1.下跌时角度转动速度放缓,直到特定值。
2.回升时翻转角度。

率先个职分超级轻巧,大家只必要增多两行代码到update()方法。

真实赌钱游戏平台网站 ,JavaScript

if (this.bird.angle < 20) this.bird.angle += 1;

1
2
if (this.bird.angle &lt; 20)  
    this.bird.angle += 1;

其次步大家有七个选用,
粗略起见,大家能够只在jump()方法中增添

JavaScript

this.bird.angle = -20;

1
this.bird.angle = -20;

可是这中角度的面目一新看起来有一点儿别扭。所以,大家还足以让角度有个调换的进程。大家能够用如下代码替换掉上边的。

JavaScript

// create an animation on the bird var animation = this.game.add.tween(this.bird); // Set the animation to change the angle of the sprite to -20° in 100 milliseconds animation.to({angle: -20}, 100); // And start the animation animation.start();

1
2
3
4
5
6
7
8
// create an animation on the bird
var animation = this.game.add.tween(this.bird);
 
// Set the animation to change the angle of the sprite to -20° in 100 milliseconds
animation.to({angle: -20}, 100);
 
// And start the animation
animation.start();

也得以揉成意气风发行代码:

JavaScript

this.game.add.tween(this.bird).to({angle: -20}, 100).start();

1
this.game.add.tween(this.bird).to({angle: -20}, 100).start();

换个思路清楚Javascript中的this,Javascript中apply方法的妙用。那样一来就大概了,假设你未来测验一上游戏,你会发掘鸟类的角度变化得并不自然。像侧边包车型地铁图,可是我们想要的是右图的作用。

20个试玩平台 12

为了完毕那一个指标,大家要做的是改动小鸟的为主(anchor)。在create()方法中增多如下代码来改动大旨(anchor)。

JavaScript

this.bird.anchor.setTo(-0.2, 0.5);

1
this.bird.anchor.setTo(-0.2, 0.5);

现今测量检验一下嬉戏你就能够开采早就好得多了。

运行时总括暗许值

JavaScript函数私下认可值在运维时总括。为了越来越好地精晓那或多或少,请看之下代码:

function foo(value = koo()) { return value; } function koo() { return "Ignite UI"; } var a = foo(); console.log(a);

1
2
3
4
5
6
7
8
function foo(value = koo()) {
    return value;
}
function koo() {
     return "Ignite UI";
}
var a = foo();
console.log(a);

在函数foo中,参数值的暗中认可值设置为函数koo。在运行时调用函数foo时,将计算函数koo。调用foo函数后,你会赢得如下图所示的输出(在此个例子中,大家采纳了Ignite UI框架)。20个试玩平台 13

 

对象方法中的this

在模拟 call 方法的时候,大家利用了目的方法来退换 this 的对准。调用对象中的方法时,会把对象作为艺术的上下文情状来调用。

既然 this 是指向施行函数的上下文景况的,那我们先来研究一下调用函数时的举行上下文景况。

上边小编门来看看调用对象方法时举办上下文是怎么的:

var foo = { x : 1, getX: function(){ console.log(this.x); } } foo.getX();

1
2
3
4
5
6
7
var foo = {
    x : 1,
    getX: function(){
        console.log(this.x);
    }
}
foo.getX();

20个试玩平台 14

从上海体育场合中,大家得以观看getX措施的调用者的上下文是foo,因此getX情势中的 this 指向调用者上下文foo,转换成 call 方法为foo.getX.call(foo)

下边我们把任何函数的调用方式都按调用对象方法的思绪来改变。

版权声明:本文由20个试玩平台发布于真实赌钱游戏网站,转载请注明出处:换个思路清楚Javascript中的this,Javascript中apply方法