有这样一种写法

1
if(context === void 0) return func;

void是javascript中的一个函数,接受一个参数返回值永远都是undefined。可以说,使用void的目的就是为了得到javascript中的undefined。

1
2
3
4
void 0
void (0)
void hello
void (new Date())

以上都讲返回undefined,那么为什么不直接使用undefined
undefined并不是javascript的保留字,在一些环境下可以被赋值,这样就不能安全的得到undefined的值,例如

1
2
var undefined = 100;
console.log(undefined);

!!的作用

在javascript中,!null和!undefined都会产生TRUE的结果,所以!!就相当于取布尔值

1
2
!!null;//返回false
!!"2";//返回TRUE

arr.slice()
可以说实现对一个数组的拷贝,不错的技巧

继承

1.原形链继承

1
2
3
4
5
6
7
8
9
10
11
var father = {
a : 1,
b : 2,
};
var son = function(){
this.c = 3;
this.d = 4;
};
son.prototype = father;
var test = new son();
console.log(test.a); // 1

2.构造函数继承

1
2
3
4
5
6
7
8
9
10
11
var gz1 = function(){
this.a = 1;
this.b = 2;
};
var yaya = new gz1;
var gz2 = function(){
gz1.call(this);
this.c =3;
this.d = 4;
}
var ynyn = new gz2;

3.拷贝式继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var extend = function(desObj,srcObj){
for(var key in srcObj){
if (Object.prototype.toString.call(srcObj[key]) == "[object Object]"){
desObj[key] = {};
desObj[key] = srcObj[key];
}else if(Object.prototype.toString.call(srcObj[key]) == "[object Array]"){
desObj[key] = [];
desObj[key] = srcObj[key].slice();
}else{
desObj[key] = srcObj[key];
}
}
}
var b = [1,2,3,[4,5],{6:7,7:8}];
var a = [];
extend(a,b);