好,那就让我们一步步打造,首先让我们来看下继承原本的写法:
复制代码 代码如下:
我们看到,在实际上,继承的根本就在于这一步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即可,也就是说我们将子原型进行一个封装。
好,就按照这个思路,我们来实现利用原型链的继承关系的封装。
复制代码 代码如下:
这样就完成了我们对继承关系的封装。当然,我们也可以不单独写一个变量:
复制代码 代码如下:
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);
}
});
当然,这全凭个人爱好了,个人认为第一种办法相对更清晰一些,但是第二种办法则更优雅。