CAT | 每日一博
这个功能我觉得好实用
大概意思就是在输入类似 function(){的时候,如果编辑器发现这一行后面还有其他的代码,就会自动把代码换行到下一行,然后再代码后面补上一个”}”,注意,我指的不是{}的自动匹配,而是可以自动把这一行后面的代码放到{}的内部.
在输入if(…){ 的时候同样起作用
此时点击 {,并按下回车
NetBeans还有一个比较有意思的功能,那就是会解析注释,然后如果注释里注释了一个参数,而实际上没有写参数,编辑器会提示警告:
var aa={
bb:"bb",
cc:"cc"
},bb;
for(var i in bb=aa){ //在某些场合下可以使代码变得简洁
alert(bb[i])
}
之后我会多写点这种无聊的博客,没时间长篇大论了,只好记录一点简单的东西
在ie6里会导致截取字符串的操作一直循环执行,造成内存泄露
解决方法:
document.getElementById("dd").onpropertychange=function(){
if(this.value.length>20){
this.value=this.value.substr(0,20);
}
}
每日一博,并不是每日都写,只是写的更经常一点,但是也会写的简短一点.
大家应该都知道怎么动态加载图片吧,类似这样:
var img=new Image();
img.onload=function(){document.getElementById("log").innerHTML+="dd";}
img.src="19677.png";
可是在ie6里有一点小问题,那就是在处理GIF的时候,onload并不是只触发一次,而是每隔一段时间就触发一次,这是在和同事的讨论中发现的,触发间隔应该就是gif的帧速吧,这个没研究过.
所以在处理gif的时候要特别注意这个问题,我想出的解决方法是在onload事件里加一个:this.onload=null.
有人说这样形成了懒惰函数,我还不知道什么是懒惰函数,等研究研究再说吧.
年前,某次分享会上听玉伯偶然说了这句话,当时糊里糊涂,不明所以,偶然有一天我做一个东西,发现某个对象的实例之间竟然会互相操作了定义在prototype里的属性,于是我验证了下:
var objA=function(){
}
objA.prototype={
name:{},
setName:function(str){
this.name=str;
},
getName:function(){
return this.name;
}
}
var a=new objA();
var b=new objA();
//a.name={firstname:"孙",fathername:"信宇"};//undefined
a.name.firstname="孙";//弹出sun
alert(b.name.firstname);
在这个例子里,当我修改实例a的name属性的时候,实例b的name属性页跟着变了,而且说明他们引用了同一份对象.
如果name属性是值类型,例如字符串,就不会与这种问题了,那是因为字符串每次被操作都返回新实例,当然反映不出冲突来了.
那为什么会出现这种冲突呢?
专业术语我不太会讲,但是prototype这种原型继承的好处其实就是节省程序运行空间,当你从objA实例化两个实例:a和b时,并不会创建两份属性和方法,而是把他们都指向一份属性和方法,所以prototype里的所有的东西都被所有的实例共享,实例中保存的只是一个json索引.
正因为如此,如果整个改变name的值的话,让他指向别的对象,这样就不会互相影响了,而且对于值类型来说,本质就是每次操作都会返回新的实例,所以不会出现冲突.
对于这种冲突来说,最好的解决办法就是将属性从prototype里移出来,写在构造函数里:
var objA=function(){
this.name={}
}
objA.prototype={
setName:function(str){
this.name=str;
},
getName:function(){
return this.name;
}
}
这样再试一次就会发现,每次创建实例都会创建一个新的name属性对象,而不是指向同一个对象;
也可以在prototype理的init方法里用this.name={}来初始化配置参数,属性等内容,反正就是不能写在prototype里面.但是可以在函数里初始化定义.
还有一点要注意:我个人认为,js里所有的东西都是对象,包括值类型,他们之所以表现出非引用类型的性质,是因为每次对这些对象操作都会返回新的实例,这只是一种假象,事实上可以说,js里所有的东西都是引用类型,只是值类型在被操作时引用总是被改变,表面上来看就是非引用类型了.
觉得不对的可以加群:46532005 讨论




