今天上午主管又给我上课了,然后自己又查了一些东西,所以很有必要做一下总结。
首先是两个函数输出的比较。
var type=2;
function ty(type) {
type=3;
return;
}
var a=ty(type);
console.log(a);
我以为结果是2,敲了一遍发现结果是undefined。
var date={
type:2
}
function fun(obj) {
obj.type=3;
return;
}
fun(date);
console.log(date.type);
上面这个输出的是3.
其实我还没有搞清楚为什么会有这样的差异,还是先放一放,明天再去解决这个问题吧
还有就是map对象,关于map对象,搜索资料如下:
一个键只能对应多个值,但是一个值只能对应一个键
关于键值对
专业定义:是计算机科学技术,查看jdk文档,找MAP接口。键值对存储是数据库最简单的组织形式。
键:就是存的值的编号
值:就是要存放的数据
网络定义:
1.Key-Value
MapReduce是一个简化的并行处理框架,是因为它把所有数据看作一系列的关键值对(Key-Value Pairs)。把数据都看作关键值对(KV)是一种简化,但是这种简化的计算平台在实际当中可以解决大量不同的分布计算问题。
2.KVP
KVP(键值对)是不是就相当于通信中传输的一帧 ZigBee 会友: 通信中传输的一帧应包括帧头、数据内容、侦尾。
3.name-value pair
在关系模型中,元组是由“键值对”(name-value pair)构成的集合,而关系则是元组的集合。(“元组”一词在关系型数据库中的定义与数学和许多编程语言中的意思略有不同。
4.Value
正如我们所见,字段的验证规则是以键值对(key-value pair)的形式定义的,其中键包含了验证队则作用的数据库字段名,而值则包含了所有施加于该字段的约束规则。
理解this对象
this是函数运行时自动生成的一个内部对象,只能在函数内部使用,但总指向调用它的对象。
通过以下几个例子加深对this的理解。
(1)作为函数调用
var name = 'Jenny';
function person() {
return this.name;
}
console.log(person()); //Jenny
上面这个例子在全局作用域中调用person(),此时的调用对象为window,因此this指向window,在window中定义了name变量,因此this.name相当于window.name,为Jenny。
再看下面一个例子:
function a() {
function b() {
function c() {
console.log(this);
}
c();
}
b();
}
a(); // window
这个例子中,也同为函数调用,因此this指向window。
(2)作为对象的方法调用
var name = 'Jenny';
var obj = {
name: 'Danny',
person: function() {
return this.name;
}
};
console.log(obj.person()); //Danny
在这个例子中,person()函数在obj对象中定义,调用时是作为obj对象的方法进行调用,因此此时的this指向obj,obj里面定义了name属性,值为Danny,因此this.name = “Danny”。
(3)作为构造函数调用
作为构造函数调用和普通函数调用的区别是,构造函数使用new关键字创建一个实例,此时this指向实例对象。
function person() {
return new person.prototype.init();
}
person.prototype = {
init: function() {
return this.name;
},
name: 'Brain'
};
console.log(person().name); //undefined
这是一个比较复杂的例子,涉及到了原型。
首先,创建构造函数person,为函数重新定义原型,在原型上定义了两个方法init和name,其中init返回this.name。
调用person函数的name属性,发现返回的是undefined,为什么不是Brain呢?
我们看,调用person,返回person.prototype.init()的一个实例,假设返回的这个实例名为a,那么此时的this指向的就是a,a作为person.prototype.init()的一个实例,那么所有定义在person.prototype.init()中的方法等都可以被a调用,但是name属性定义在person的原型中,而非init函数中,因此返回undefined。
(4)apply和call
使用apply()和call()可以改变调用函数的对象,第一个参数为改变后调用这个函数的对象,其中apply()的第二个参数为一个数组,call的第二个参数为每个参数。
function person() {
return this.name;
}
var obj = {
name: 'Jenny',
age: 18
};
console.log(person.apply(obj)); //Jenny
使用apply函数改变了调用person的对象,是在obj对象下面调用person,不再是在window对象下调用了,因此this指向obj,this.name = “Jenny”;
主管还讲到事件机制和反射机制啥的,明天学了再做总结了。