一、函数的原型对象
- 原型对象中有原型链—指向最高
- 函数的原型对象的构造函数指向本身
var arr=new Array();
console.log(arr);
function myArray(){
this.length=0;
}
myArray.prototype={
constructor:myArray,
mysort:function(){
console.log(this);
}
}
var myarr=new myArray();
console.log(myarr);
myarr.mysort();
function Animal(){
}
console.log(Animal.prototype);
console.log(Animal.prototype.constructor);
二、prototype(函数的原型)
- 每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性,原型对象上具有原型属性以及原型方法。
- 函数才有prototype,每个函数都有一个prototype属性,这个属性指向函数的原型对象。通过prototype可以为对象在运行期间添加新的属性和方法。
三、__ proto__(原型链)
- 这是每个对象(除null外)都会有的属性,叫做__proto__,指向自身的构造函数的原型对象。
- 从内置对象上可以观察到,实例化的当前对象__proto__(原型链)指向自身的构造函数的原型对象。
<script>
var arr = [];
console.log(arr);
</script>
四、constructor(构造函数)
- 每个原型都有一个constructor属性,指向函数本身。
五、prototype继承
function Person(name,job){
this.name=name;
this.job=job;
this.sex='';
}
Person.prototype={
constructor:Person,
sleep:function(){
console.log("睡觉");
},
eat:function(){
console.log("吃饭");
}
}
Person.prototype.eat();
var stu=new Person('小明','学生');
stu.__proto__.sex="女";
console.log(stu);
六、结论
1.实例对象的原型链指向当前类的原型对象。
console.log(arr.__proto__ == Array.prototype);
2.原型对象的原型链指向Object函数的原型对象
console.log(arr.__proto__.__proto__);
console.log(arr.__proto__.__proto__ == Object.prototype);
3.Object函数的原型对象的原型链指向null,Object的原型链是不存在的。
console.log(arr.__proto__.__proto__.__proto__);
4.所有对象最后都会指向Object函数的原型对象。
console.log(stu.__proto__ === Person.prototype);
console.log(stu.__proto__ instanceof Person);
console.log(typeof stu.__proto__);
console.log(stu.__proto__.constructor instanceof Person);
console.log(typeof stu.__proto__.constructor);
七、图解过程