JS中的prototype属性实现继承

在JS中没有类的概念,继承是通过对象和对象之间实现的。其中主要是利用prototype属性来实现的。

函数中的prototype属性,又叫原型对象。构造函数可以通过prototype属性来添加函数。这样做到代码的简单性,避免冗余代码。还可以通过prototype属性来实现继承。

例如:

<span style="font-size:18px;">function Person(name,age,email) {
            this.user_name = name;
            this.user_age = age;
            this.user_email = email;

        }
        Person.prototype.sayHi=function(){
            alert (this.user_name+'    '+this.user_age+'   '+this.user_email);
        }
        var p1=new Person('ss',18,'ss@163.com');
        p1.sayHi();
        function student(sid) {
            this.user_ID = sid;
        }
        student.prototype = p1;
        var s1 = new student(001);
        s1.user_name = 'sss';
        s1.user_age = 10;
        s1.sayHi();
        </span>
上面这个例子就是一个继承的实现,student继承了person,本身student没有user_name,user_age,user_email等字段。通过让student的prototype属性等于p1然后指向了p1,此时p1指向的是person。所以这样就间接的继承了person。

下面是通过浏览器调试的执行结果



从上面这幅图更清晰的看到s1的__proto__是person,person的__proto__指向了sayHi方法。

PS

prototype原型对象中的值是只读的,不能修改。当变量“修改的时候”只是在自身的基础上增加了一个属性,并没有修改原型中的值。

对于原型中的引用类型,修改的时候只是修改了引用地址下面的值(栈中的值),对于原型中的地址没有改变。如果引用类型都做修改的话,也会自己创建一个属性。这样原型里面的值还是没有改变。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值