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)
        }*/

  

 

  

原文地址:https://www.cnblogs.com/zifeiyu/p/3670562.html