//==================== var a=function(){} a.add=function a(){ return 1; } var b=a; a.add=function b(){ return 2; } b.add();//log: 2 //==================== var c=function(){ return 1; } var d=c; c=function(){ return 2; } d(); // log:1 都是引用类型,这两段代码有啥区别吗,请教
//函数表达式,空构造函数 var a = function () { } alert(typeof a) //function a.add = function a() { alert("1"); } a.add();//1 var b = a; //函数表达式,b引用a,b的protptype指向var a = function(){} alert(typeof b); //function
//新的a.add = function b(){}会把原来var a = function(){}中的方法给重写了。 a.add = function b() { alert("2"); } window.onload = function () { b.add(); //2 }
//c构造函数 var c = function () { alert("1"); } //var d = c; //新的C c = function () { alert("2"); } var d = c; window.onload = function () { d(); // 1 } javascript的执行环境与别的语言有些区别,它是从上向下开始执行,如果你的var d= c;放在下面,那么它就会弹出2来了。而每一个新的数据流都会在内存中占据一个位置,如果你要释放它,设置为null就可以了。
var b = a; //函数表达式,b引用a,b的protptype指向var a = function(){}
b的protptype指向var a = function(){}有点不明白。
那var b=a 和 var b=new a() 有啥区别呢?
@axle:
在JavaScript中,是通过prototype原型链的方式来实现指针的指引,你可以把它想象成指引,b与a都链向一个内存位置。
var b = a;是相当于 b引用了a ,而var b = new a()是new了一个实例。要说区别把,这两种方式都能得到a 定义的方法,唯一有区别的地方,后面这个new出了实例。
第一段:a存放的是指向对象数据的地址 是个address 然后赋予b, b和a存放的是一样的一个地址。
a.add=function b(){ return 1;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里存放一个add方法,
a.add=function b(){ return 2;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里修改add方法,
既然b和a存放的是同个地址 地址指向的数据对象已经被修改 那么b.add() 就是2了。
第二段:c存放的是指向对象数据的地址, d和c存放的是一样的一个地址。
不同的是,c=function(){ return 2;} 里面function(){ return 2;}是一个新的对象数据,那么在堆上就会有新的内存空间来放,会产生新的地址赋予c,既然c和d本来的关系是 存放这一样的地址 现在c改变了地址,跟d又没关系 所以d()还是指向原来的地址就是还是1
我这是透过现象看本质。。。 哈哈 你参考参考就行了 我也不确定到底是不是完全准确