今天在看视频,学到原型链部分了,正好将之前的知识补充一下,三局口诀
- 每一个函数,都有一个天生自带的属性,prototype,也叫原型,这个属性是一个对象数据类型
- 在prototype这个对象上,浏览器默认给它添加了一个属性,constructor,指向当前的函数
- 每个对象都有一个自带的属性,__ proto __,这个属性指向当前实例所属的类的实例对象
Object这个类是所有类的基类,如果从之前的推理路径推断的话,它的原型对象指向了原型对象自己,事实上
Object.prototype.__ proto__ 值为null
讲解是说Object对象的原型对象没有这个属性 __ proto __ ,但是如果没有,应该是undefined才对,但是这里是null,并且在chrome里面查看,确实是没有这个属性的。
对了,__ proto __之前是说在生产省不要使用这个属性,就是因为在IE上直接使用这个属性会报错,因为IE为了保护原型上的属性不会瞎改。
continue与break的不同
其实对这两个关键字,理解的比较肤浅,都是跳出,但是break是会跳出整个循环,主要用在switch语句里面
而continue只是跳出当前循环,比如for循环中,在一次循环中,命中了某个条件,这次循环就跳出,继续下次循环,如果break在这儿,这整个循环就都结束了。
看下面的代码就能很明白的知道两者的不同,如果使用break,那就比较暴力了,直接 掀桌子,像古惑仔乌鸦一样,大家后面都没得吃了,但是如果是continue呢,小时候大家排队打饭,本来你前面有个人,突然被踢走了,这个人不在,直接过了,就到你了
var text="";
for (i = 0; i < 10; i++) {
console.log(i);
// if (i === 3) { break; }
if (i === 3) {
continue
console.log(55);
}
text += "数字是 " + i + "<br>";
}
console.log(text);
贴一个数组去重的写法,之前没尝试过,
/*
* 数组去重方法
* */
Array.prototype.myUnique=function () {
var obj={}
for(var i=0;i<this.length;i++){
console.log(i);
var cur=this[i];
if(obj[cur]===cur){
this[i]=this[this.length-1]; //将这个用最后一个替换掉,并且,将数组缩短
this.length--;
i--; // 因为将数组缩短了,所以,需要将i减一,这样,这个地方的值还能被判断,必须减一
continue
}
obj[cur]=cur
}
obj=null
return this
}
var arr1=[1,2,3,4,5,1,2,3,4,5];
arr1.myUnique()
后面还有东西没搞完,时间太晚了,后面继续补上