什么是原型?
原型:每一个构造函数都有一个原型对象(Object.prototype),每一个原型对象都有一个指针指向构造函数(Object.prototype.constructor),
实例都包含一个指向原型对象的一个指针(obj.__proto__); //权威说法 通过这个指针可以使用原型对象中的方法
//每一个构造函数都有一个原型对象,每一个原型对象都有一个构造者
引用数据类型 Object 所有其他引用类型都是Object的一个子类型 Array function
原型对象:Object.prototype
原型属性:constructor
原型方法 各种方法
静态属性,静态方法:只能有构造函数本身调用的属性和方法
var obj={
name:'zhangsan'
};
console.log(obj.toString(),'调用原型对象中的方法');
console.log(obj.__proto__.toString(),'调用原型对象中的方法');
console.log(obj.toString,'调用原型对象中的属性');
console.log(obj.__proto__===Object.prototype,'指针指向原型对象');
// 实例可以继承原型对象中的方法和属性
console.log(Object.prototype.constructor===Object,'构造者是Object');
什么是原型链?
原型链继承
子类的原型对象指向父类的实例(Cat.prototype=new Animal());
继承规则:
实例调用属性和方法
1.自身存在先调用自身
2.如果没有,调用构造函数原型对象中的属性和方法
3.如果再没有,调用父类构造函数原型对象中的属性和方法
经典继承 借用构造函数继承
在子类构造函数内调用父类构造函数
Animal.call();
function Cat(){
Animal.call()
}
组合继承(原型继承+经典继承)
instaceof --检测是否是构造函数的实例
cat instaceof Cat
cat instaceof Animal
cat instaceof Object
new Animal instaceof Animal
new Animal instaceof Object