首页 > web前端 > js教程 > 正文

Javascript学习笔记9 prototype封装继承_基础知识

php中文网
发布: 2016-05-16 18:36:41
原创
957人浏览过

好,那就让我们一步步打造,首先让我们来看下继承原本的写法:

Browse AI
Browse AI

AI驱动的网页内容抓取和数据采集工具

Browse AI 105
查看详情 Browse AI
复制代码 代码如下:

<script> <BR>var Person = function(name, age) { <BR>this.name = name; <BR>this.age = age; <BR>} <BR>Person.prototype.SayHello = function () { <BR>alert(this.name + "," + this.age); <BR>}; <BR>var Programmer = function (name, age, salary) { <BR>Person.call(this, name, age); <BR>this.salary = salary; <BR>}; <BR>Programmer.prototype = new Person(); <BR>var pro = new Programmer("kym", 21, 500); <BR>pro.SayHello(); <BR></script>

我们看到,在实际上,继承的根本就在于这一步Programmer.prototype=new Person()。也就是说把Person加到原型链上。这一点在Javascript学习笔记7——原型链的原理 已经有过比较详尽的解释。
那也就是说,我们实现的关键就在于原型链的打造。
在上文中,我们用JSON来打造了一个原型,其原型链是p.__proto__=Person。那么我们希望在这个上封装继承,那么原型链应该是p.__proto__.__proto__=SuperClass,也就是说Person.__proto__=SuperClass。但是按照我们上面代码的继承方法,原型链关系是Person.__proto__=SuperClass.prototype。
这个和我们在上文中一样,我们的办法就是借助一个辅助函数,将原来的函数内的属性赋给X,然后令X.prototype=SuperClass即可,也就是说我们将子原型进行一个封装。
好,就按照这个思路,我们来实现利用原型链的继承关系的封装。
复制代码 代码如下:

<script> <BR>var Factory = { <BR>Create: function (className, params) { <BR>var temp = function () { <BR>className.Create.apply(this, params); <BR>}; <BR>temp.prototype = className; <BR>var result = new temp(); <BR>return result; <BR>}, <BR>CreateBaseClass: function (baseClass, subClass) { <BR>var temp = function () { <BR>for (var member in subClass) { <BR>this[member] = subClass[member]; <BR>} <BR>}; <BR>temp.prototype = baseClass; <BR>return new temp(); <BR>} <BR>}; <BR>var People = { <BR>Create: function (name, age) { <BR>this.name = name; <BR>this.age = age; <BR>}, <BR>SayHello: function () { <BR>alert("Hello,My name is " + this.name + ".I am " + this.age); <BR>} <BR>}; <BR>var Temp = { <BR>Create: function (name, age, salary) { <BR>People.Create.call(this, name, age); <BR>this.salary = salary; <BR>}, <BR>Introduce: function () { <BR>alert(this.name + "$" + this.age + "$" + this.salary); <BR>} <BR>}; <BR>var Programmer = Factory.CreateBaseClass(People, Temp); <BR>var pro = Factory.Create(Programmer, ["kym", 21, 500]); <BR>pro.SayHello(); <BR></script>

这样就完成了我们对继承关系的封装。当然,我们也可以不单独写一个变量:
复制代码 代码如下:

var Programmer = Factory.CreateBaseClass(People,
{
Create: function (name, age, salary) {
People.Create.call(this, name, age);
this.salary = salary;
},
Introduce: function () {
alert(this.name + "$" + this.age + "$" + this.salary);
}
});

当然,这全凭个人爱好了,个人认为第一种办法相对更清晰一些,但是第二种办法则更优雅。
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号