1.原型链继承
最常用的原型链继承方式应该时组合继承,示例如下:
function Person(name){
this.name=name;
}
Person.prototype.show=function(){
console.log(this.name);
}
function Student(name){
Person.call(this,name);
}
Student.prototype=new Person();
Student.prototype.constructor=Student;
var student=new Student('jc');
student.show();
这里大部分资料都会推荐我们,在改写了子类的原型对象时,再将其constructor属性重置为其构造函数,但是不禁会有疑问,这个construtor属性有什么作用呢?
2.为类添加新的方法
当类的构造函数在内层作用域中,无法直接访问到时,可以通过其示例的constructor属性访问到其构造函数,就可以为其原型对象添加新的方法
student.constructor.prototype.print=function(){
console.log('red');
}
student.print();
3.解析构造函数的参数名
可以通过toString方法获取到构造函数的代码,并解析其参数
var argu=student.constructor.toString().match(/\(.*\)/)[0].slice(1,-1).split(',');
console.log(argu);
或许angular的依赖注入,根据传入的参数判断出相应的服务也是用类似的思路实现的。
PS:数组和字符串中的slice方法中,如果传入的参数为负,可以理解为倒数第几个元素,例如-1是指的倒数第一个元素。