javascript prototype原形链

解决方案 »

  1.   

    一个简单例子,原理objA是没有trim 函数的功能,通过prototype连接trim后是原来的objA具有trim函数的功能(去两边空格)<script language="javascript" type="text/javascript">
    var objA=function(str){
    this.a='1234';
    this.b=str;
    this.fun1=function(){alert('This is a function');};
    }objA.prototype.trim=function(str){return str.replace(/^\s*|\s*$/g,"");}var a=" asdf 注意两边的空格 1111  ";
    var b="66666 1111  ";
    var newo=new objA(a);
    alert('a = ['+a+']\n\nb = ['+b+']\n\n'+newo.a+'\n\n应用trim后:['+newo.trim(a)+']');
    </script>
      

  2.   

    原来objA是没有trim 函数的功能,通过prototype连接trim后使原来的objA扩展了具有trim函数的功能(去两边空格)
      

  3.   

    JS是基于原型的语言,因此本质上是通过克隆已有的对象来创建新对象。这还意味着如果给原型上增加了新的属性和方法,那么源自同一个原型的所有对象都会获得新的属性和方法,即使是增加已经克隆的对象,这是通过对象的Prototype属性实现的,如:    <script language="javascript" type="text/javascript">
            var foo = function () { }
            var bar = new foo();
            foo.value = 5;
            alert(foo.value);//值为5
            bar.value = 6;
            alert(bar.value);//值为6
            bar.mymethod = function () { }//为函数赋值
             bar.mymethod();//调用方法
             foo.prototype.othervalue = 6;
            alert(bar.othervalue);//显示6
        </script>如上所示,我给原始对象foo的原型添加了新的属性,而在已有的对象bar里一样可以使用新的属性!希望对您有用!
      

  4.   

    我知道他有添加属性和方法的功能呢。。
    我就是不知道那个_proto_是什么意思?如果有一个function test(){}
    它会有一个name属性,值为函数名test  即test.name=="test"      
    test还有一个constructor属性,他是指向他的构造函数的.... 即test.constructor 指向 Function
    test还有一个__proto__属性,他指向他的构造函数的原型 即test.__proto__===Function.prototype     
    ps: Function.__proto.__,Object.__proto__都是function(){} 不指向任何构造函数
    它还有一个prototype属性 ; 即test.prototype={}
     
    这里的函数原型指什么呢?
    test.prototype={} 中的 {}指什么?
    test.__proto__===Function.prototype      这个就是父原型链了吗?Function.prototype