12bet,子类化是指针对一个新对象,从一个基础或超类对象中继承相关的属性。比如B继承A,那么B是A的子类,A是B的超类(父类)。所以B的所有实例从A处继承了相关方法,12bet,但B仍然能够定义自己的方法,12bet,以及重写A所定义的方法。
JavaScript中的一种实现方式如下:
var Person = function(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
};
var Student = function(name, age, gender, id, score) {
Person.call(this, name, age, gender);
this.id = id;
this.score = score;
};
Student.prototype = Object.create(Person.prototype);
var student = new Student("流星", "18", "男", 696, 60);
console.log(student);
这里超类为Person类,子类为Student类,在Student类实例化时,首先会调用超类构造函数,将超类的属性写入到子类中,而超类的原型也存在于子类的原型链上,超类原型上的方法也将被子类继承。
在JavaScript中,12博体育,可以将继承Mixin看做一种通过扩展收集功能的方式。我们可以通过向构造函数的prototype中扩展mixin对象来实现:
//实现扩展方法
function extend(obj, mixin) {
for (var item in mixin) {
obj[item] = mixin[item];
}
}
//创建需要扩展的功能集合
var myMixin = {
sayHello: function() {
console.log(this.name + " says: Hello!");
},
sayBye: function() {
console.log(this.name + " says: Bye bye!");
}
};
//将扩展应用到构造函数prototype中
extend(Student.prototype, myMixin);
var student = new Student("流星", "18", "男", 696, 60);
//新建的实例拥有扩展方法了
student.sayHello();//流星 says: Hello!
student.sayBye();//流星 says: Bye bye!
Mixin有助于减少系统中的重复功能及增加函数复用,但12博体育,会带来原型污染和函数起源方面的不确定性