十一、原型与原型链深入、对象继承、call、apply
原型与原型链深入
前导知识
几乎所有对象都有自己的原型,包括原型对象也有自己的原型。
例外:
var obj = Object.create(null);
console.log(obj);
原型
Prototype
构造函数的原型对象是实例化对象的公共祖先,实例化的不同对象能继承原型中的属性和方法。
构造函数的prototype可以手动设置吗? √
Professor.prototype.tSkill = 'Java';
function Professor(){
}
var professor = new Professor();
Teacher.prototype = professor;
function Teacher(){
this.mkill = 'JS/JQ';
}
var teacher = new Teacher();
Student.prototype = teacher;
function Student(){
this.pkill = 'HTML/CSS';
}
var student = new Student();
console.log(student);
console.log(student.pkill, student.mkill, student.tSkill);
//HTML/CSS JS/JQ Java
当我们在student对象上寻找属性时,找不到就去它的构造函数的原型对象上teacher上寻找,若找不到,继续向teacher对象的构造函数的原型对象professor上找,以此类推
原型链
对象沿着__proto__在原型上寻找属性就形成了一个链条式的继承关系,这个继承关系,我们就叫做原型链。
原型链有顶端吗? -> Object.prototype
console.log(Professor.prototype);
Object.prototype
下保存了一个toString
方法。
实例化对象只能查看原型链上的prototype吗?×
function Teacher(){
this.mkill = 'JS/JQ';
this.success = {
alibaba: '28',
tencent: '30',
jingdong: '11'
}
this.students = 500;
}
var teacher = new