js 函数名的赋值
函数是对象,Function出来的实例对象,函数名保存的是地址,指向的是函数值,引用类型,当比较的时候是比较的地址是否相同,赋值的时候是重新分配一个地址,指向一个函数对象!
1.会覆盖的情况:
var a={ name:"sun", age:"18", show:function(){ alert(this.name); } }; a.show();//"sun" var b=a; b.show=function(){ alert(this.age); };//覆盖同一个show方法 b.show(); //18 a.show(); //18
function a(){ alert("a"); } var b=a; b=function(){ alert("b"); } a();//"a",b赋值的时候,是重新生成一个地址,和a没有关系
2.不会覆盖的:
function AA(){ this.name="小明"; this.arr=[1,2.3]; } AA.prototype.new=function(){} var aa=new AA(); aa.name="xiaoMing"; var bb=new AA(); alert(bb.name);//还是"小明",不同的地址,相同的对象值
function A(){ this.name = 'wangmeijian'; this.age = 23; } A.prototype.showname = function(){ alert( this.name ) }; function B(){ A.call(this) } var a = new A(); B.prototype = a; B.prototype.showname=function() { alert(this.age) };//这个地方的赋值,是给B的原型加一个属性,保存一个函数的地址,并不会改变A下面的showname //当B.prototype=a;时,B.prototype.showname=a.showname,给a对象直接加了一个属性,保存一个函数的地址;其实这个时候A.prototype.showname应该还是存在的,没有改变。 //a.showname(); //wangmeijian var b = new B(); //b.showname(); //23 alert(A.prototype.showname);/*function(){ alert( this.name ) }*/ alert(a.showname);/*function() { alert(this.age) }*/