第十周(1For each for in for of的解释和例子以及Constructor 和Arrow function 的restore)

注:引用自https://www.cnblogs.com/ruoqiang/p/6217929.html。 https://blog.csdn.net/zengyonglan/article/details/53465505 。 https://blog.csdn.net/qq_18663357/article/details/54928572

forEach遍历数组

[].forEach(function(value, index, array) { // ... });

例子

var myArry =[1,2,3,4];
myArry.desc =‘four‘;
myArry.forEach((value,index,arr)=>{
  console.log(value);

});
//1
//2
//3
//4

forEach遍历数组,而不是遍历对象哦,而且在遍历的过程中不能被终止,必须每一个值遍历一遍后才能停下来

注意其与jQuery的$.each类似,只不过参数正好是相反的

$.each([], function(index, value, array) { // ... });

$.each遍历数组或者类数组

第1个和第2个参数正好是相反的,这里要注意了,不要记错了。

for in遍历对象

循环遍历对象的key,是键值对前面的那一个哦

一般不推荐遍历数组,因为for in遍历后的不能保证顺序,而且原型链上的属性也会被遍历到,因此一般常用来遍历非数组的对象并且使用hasOwnProperty()方法去过滤掉原型链上的属性

var myArry =[1,2,3,4];
myArry.desc =‘four‘;
 for(var value in myArry){ //循环key
  console.log(value)
}

//"0"
//"1"
//"2"
//"3"
//"desc" 注意这里添加上去的属性也被遍历出来了

for of遍历对象

循环遍历对象的值,是遍历键值对后面的那一个value哦 ,与for in遍历key相反

var myArry =[1,2,3,4];
myArry.desc =‘four‘;
for(var value of myArry){
  console.log(value)
}
//1
//2
//3
//4

  • 这是最简洁、最直接的遍历数组元素的语法
  • 这个方法避开了for-in循环的所有缺陷
  • 与forEach()不同的是,它可以正确响应break、continue和return语句

在 Javascript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中。这个 constructor 保存了指向 function 的一个引用。
在定义一个函数(代码如下所示)时,

function F() {
// some code
}

? JavaScript 内部会执行如下几个动作:

1.为该函数添加一个原形(即 prototype)属性
2. 为 prototype 对象额外添加一个 constructor 属性,并且该属性保存指向函数F 的一个引用

这样当我们把函数 F 作为自定义构造函数来创建对象的时候,对象实例内部会自动保存一个指向其构造函数(这里就是我们的自定义构造函数 F)的 prototype 对象的一个属性proto,

所以我们在每一个对象实例中就可以访问构造函数的 prototype 所有拥有的全部属性和方法,就好像它们是实例自己的一样。当然该实例也有一个 constructor属性了(从 prototype 那里获得的),每一个对象实例都可以通过 constrcutor 对象访问它的构造函数,请看下面代码:

var f = new F();
alert(f.constructor === F);// output true
alert(f.constructor === F.prototype.constructor);// output true

我们可以利用这个特性来完成下面的事情:
对象类型判断,如

if(f.constructor === F) {
// do sth with F
}

其实 constructor 的出现原本就是用来进行对象类型判断的,但是 constructor 属性易变,不可信赖。

用arrow function写function比原来的写法要简洁清晰很多:

function(i){ return i + 1; } //ES5
(i) => i + 1 //ES6

简直是简单的不像话对吧…
如果方程比较复杂,则需要用{}把代码包起来:

function(x, y) {
x++;
y--;
return x + y;
}
(x, y) => {x++; y--; return x+y}

除了看上去更简洁以外,arrow function还有一项超级无敌的功能!
长期以来,JavaScript语言的this对象一直是一个令人头痛的问题,在对象方法中使用this,必须非常小心。例如:

class Animal {
constructor(){
this.type = ‘animal‘
}
says(say){
setTimeout(function(){
console.log(this.type + ‘ says ‘ + say)
}, 1000)
}
}

var animal = new Animal()
animal.says(‘hi‘) //undefined says hi

运行上面的代码会报错,这是因为setTimeout中的this指向的是全局对象。所以为了让它能够正确的运行,传统的解决方法有两种:

第一种是将this传给self,再用self来指代this

says(say){
var self = this;
setTimeout(function(){
console.log(self.type + ‘ says ‘ + say)
}, 1000)

第二种方法是用bind(this),即

says(say){
setTimeout(function(){
console.log(self.type + ‘ says ‘ + say)
}.bind(this), 1000)

但现在我们有了箭头函数,就不需要这么麻烦了:

class Animal {
constructor(){
this.type = ‘animal‘
}
says(say){
setTimeout( () => {
console.log(this.type + ‘ says ‘ + say)
}, 1000)
}
}
var animal = new Animal()
animal.says(‘hi‘) //animal says hi

当我们使用箭头函数时,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,它的this是继承外面的,因此内部的this就是外层代码块的this。

原文地址:https://www.cnblogs.com/LQLM/p/9914889.html

时间: 2024-11-13 06:38:57

第十周(1For each for in for of的解释和例子以及Constructor 和Arrow function 的restore)的相关文章

第十周周总结

周数 专业学习目标 专业学习时间 新增代码量 人文方面的学习 知识技能总结 第 十 周 数据结构: 树,二叉树 5h 400左右 <只有偏执狂才能生存> 区分树的各种表示法以及树的三种遍历 WEB:事件处理的相关事件 5h 400左右 完成事件处理的键盘鼠标相关事件

20155335俞昆《java程序设计》第十周总结

学号 2016-2017-2 <Java程序设计>第十周学习总结 ## 事实上网络编程,我们可以简单的理解为两台计算机相互通讯数据而已,对于程序员而言,掌握一种编程接口并使用一种编程模型相对而言就简单多了,javaSDK提供了一些相对简单的Api来完成12这些工作,Socket就是其中之一,对于java而言,Api的存在和java.net包里面.因此只要导入这个包就可以准备网络编程了. 客户机到服务机的模型就是网络编程的基本模型,简单的说就是引进这两个进程之间的相互通信,其中一个必须提供固定的

第十周进度条

第十周          日期  星期一   星期二   星期三   星期四   星期五   星期六   星期日  了解到的知识点      

第十周(补)

最近这段时间对自己的学习状态很不满意,上课一直开小差,只好利用课余的时间去和学霸请教了. 周次 学习时间 新编写代码行数 博客量(篇) 学到知识点 第十周 5 120 1 HTML                                                  

学习进度条 第十周

到了发进度条的时候才想起来上周的进度条忘记发了,这周看了孟晨助教的评论,给自己指出了好多问题(虽然有些术语还没接触过),发现自己有一点毛病很明显:写文档的能力太差,写东西比较随意,想到哪写到哪,以后要多向写文档好的同学看齐. 本周末本计划开始冲刺,由于找到的一些可以添加的demo有些问题迟迟没有开始,下周会抓紧开始   第十周 所花时间(H) 10 代码量(行) 2000 博客量(篇) 1 了解到的知识点 安卓开发的一些知识

软件工程_东师站_第十周作业

一.PSP Data Type Job start Int End Total 20160510 助教 团队作业二 20:00 5 21:00 55 20160511 助教 团队作业二.三 18:45 16 20:45 104 20160512 耐撕 站立会议 18:15   18:35 20 二.进度条   代码行数 博客字数 知识点 第一周 400 430 见我博客软件工程——师大站1 第二周 0 5200 见我博客软件工程_东师站_课堂笔记 第三周 0 63 站立会议.单元测试 第四周 1

软件工程进度条-第十周

第十周 所花时间(包括上课) 6 代码量(行) 0 博客量(篇) 1 了解到的知识点 开发中期对软件需求的改进方法.

20145123刘森明《Java程序设计》第十周学习总结

教材学习内容总结 1.网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输2.在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫做域名解析3.在现有的网络中,网络通讯的方式主要有两种:TCP(传输控制协议)方式UDP(用户数据报协议)方式4.客户端(Client)是指网络编程中首先发起连接的程序,客户端一般实现程序界面和基本逻辑实现,在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式,客户端的编程主要由三个步骤实

第十周学习进度

  第十周 学习时间 15 代码量 300 博客量 1 学习到的知识点 安卓程序的编写,软件用户的需求分析 总结:这周比较轻松,主要是对自己程序后期开发的构想,理念,想法很重要,要符合面对用户的需求,要有自己的特色,这很重要.