JS中的prototype属性实现继承

来源:互联网 发布:linux 进入图形命令 编辑:程序博客网 时间:2024/05/29 12:37

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

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


1 0
原创粉丝点击