js原型,原型链

js中的对象中有一个prototype属性,这个就是函数中的原型,他的值也是一个对象,所以他也有自己的原型,这样连接起来就形成了原型链,原型链的顶端是object,它的prototype为null,如果自己设置了属性和函数,即任意一个对象都可以调用object原型上的函数和获取它的属性,前提是对象到object之间无同名属性和函数,再看下面代码

   function Test(name){
       this.name=name;
    }
    Test.prototype.out=function(){console.log(3)}
var obj=new Test('hh');
    obj.out();

    Object.prototype.con=function(){console.log(4)}
    obj.con()
   var a=new Array();
var b=[1,2]
    b.con()
a.con()

结果为3,4,4,4。如果访问对象的属性,他会先从自己的身上找,找不到再从自己的原型上找,还找不到则会沿着原型链一层一层往上找。关于原型的继承也有几种方式

function Test(name){
       this.name=name;
    }
    Test.prototype.out=function(){console.log(3)}
var obj=new Test('hh');
    function Test1(age){
        this.age=age;
    }
    Test1.prototype=obj;
    var obj1=new Test1(10);
    obj1.out()

第一种是父类new一个对象赋值给子类的原型,这个打印结果为3

 function Test(name){
       this.name=name;
    }
    Test.prototype.out=function(){console.log(3)}
var obj=new Test('hh');
    function Test1(age){
        this.age=age;
    }
    Test1.prototype=Test.prototype
    var obj1=new Test1(10);
    obj1.out()
    Test1.prototype.in=function(){console.log(4)}
obj.in()

第二种是直接赋值父类的原型直接赋值给子类,但是这样做有缺点,就是子类的原型修改后会影响父类,所以输出的结果为3和4,及父类原型上也有in属性。

 function Test(name){
       this.name=name;
    }
    Test.prototype.out=function(){console.log(3)}
var obj=new Test('hh');
    function Test1(age){
        this.age=age;
    }
   for(var key in Test.prototype){
       Test1.prototype[key]=Test.prototype[key]
   }
    var obj1=new Test1(10);
   obj1.out()

第三种方法是使用for循环,这种方法也不会出现像第二种一样子类原型改变影响父类原型的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值