原型对象的constructor属性的作用

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是指的倒数第一个元素。

推荐阅读更多精彩内容